spring boot之mybatis分页多种方法

来源:互联网 发布:上海网站seo公司 编辑:程序博客网 时间:2024/06/07 17:55

我们讲一下mybatis集成的四种方式(可以先翻看一下上篇博客),顺带把分页pageHelper讲了
分页插件先加上

  <dependency>        <groupId>com.github.pagehelper</groupId>        <artifactId>pagehelper</artifactId>        <version>4.1.1</version>      </dependency> 

方法一
在启动java类中添加注入bean:sqlSessionFactory和dataSource

@ComponentScan@MapperScan("org.test1.mapper")@SpringBootApplicationpublic class Application {    @Bean    @ConfigurationProperties(prefix="spring.datasource")    public DataSource dataSource(){        return new org.apache.tomcat.jdbc.pool.DataSource();    }    @Bean(name="sqlSessionFactory")    public SqlSessionFactory sqlSessionFactoryBean() throws Exception{        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();        sqlSessionFactoryBean.setDataSource(dataSource());        //分页插件        PageHelper pageHelper = new PageHelper();        Properties properties = new Properties();        //properties.setProperty("dialet", "Oracle");        properties.setProperty("resonable", "false");        properties.setProperty("pageSizeZero", "true");        pageHelper.setProperties(properties);        sqlSessionFactoryBean.setPlugins(new Interceptor[]{pageHelper});        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();        sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:/mybatis/*.xml"));        return sqlSessionFactoryBean.getObject();    }    @Bean    public PlatformTransactionManager transactionManager(){        return new DataSourceTransactionManager(dataSource());    }    public static void main(String args[]){        SpringApplication.run(Application.class);    }}

调用:
PageHelper.startPage(1,1);
param:第几页,页面几条数据

这是对于我们上篇博客集成mybatis的方法,直接添加个拦截就可以了;
具体的可以看上篇博客

方法二

我们再试另一种方法:
加两个config文件
通过添加@Configuration来解决的注入dataSource和sqlSessionFactory的

@Configuration@EnableTransactionManagementpublic class MyBatisConfig implements TransactionManagementConfigurer {    @Autowired    DataSource dataSource;    @Bean(name = "sqlSessionFactory")    public SqlSessionFactory sqlSessionFactoryBean() {        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();        bean.setDataSource(dataSource);        bean.setTypeAliasesPackage("org.test1.mapper");        //分页插件        PageHelper pageHelper = new PageHelper();        Properties properties = new Properties();        properties.setProperty("reasonable", "true");        properties.setProperty("supportMethodsArguments", "true");        properties.setProperty("returnPageInfo", "check");        properties.setProperty("params", "count=countSql");        pageHelper.setProperties(properties);        //添加插件        bean.setPlugins(new Interceptor[]{pageHelper});        //添加XML目录        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();        try {            bean.setMapperLocations(resolver.getResources("classpath:/mybatis/*.xml"));            return bean.getObject();        } catch (Exception e) {            e.printStackTrace();            throw new RuntimeException(e);        }    }    @Bean    public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {        return new SqlSessionTemplate(sqlSessionFactory);    }    @Bean    public PlatformTransactionManager annotationDrivenTransactionManager() {        return new DataSourceTransactionManager(dataSource);    }}
@Configuration//TODO 注意,由于MapperScannerConfigurer执行的比较早,所以必须有下面的注解@AutoConfigureAfter(MyBatisConfig.class)public class MyBatisMapperScannerConfig{  @Bean  public MapperScannerConfigurer mapperScannerConfigurer() {      MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();      mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");      mapperScannerConfigurer.setBasePackage("org.test1.mapper");      return mapperScannerConfigurer;  }}

其它没有区别;

方法三

第三种超级简单的办法:
但注意添加mapper扫描
就是把我们configuration这步给省去了;用的人家启动时默认的sqlSessionFactory;
直接在application.properties中添加:mybatis.mapperLocations: classpath:/mybatis/*.xml;
启动即可;
需要配置的话可以添加mybatis的其他参数

# MyBatis mybatis: typeAliasesPackage: com.tony.entity mapperLocations: classpath:/com/tony/mapper/*.xml configLocation: classpath:/mybatis-config.xml

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>    <settings>        <setting name="logImpl" value="LOG4J"/>    </settings>    <typeAliases>        <typeAlias type="org.test.mapper.testMapper" alias="Student" />    </typeAliases>    <plugins>        <!--mybatis分页插件-->        <plugin interceptor="com.github.pagehelper.PageHelper">            <property name="dialect" value="mysql"/>            <property name="offsetAsPageNum" value="false"/>            <property name="rowBoundsWithCount" value="false"/>            <property name="pageSizeZero" value="true"/>            <property name="reasonable" value="false"/>            <property name="supportMethodsArguments" value="false"/>            <property name="returnPageInfo" value="none"/>        </plugin>    </plugins>    <mappers>        <mapper resource="/mybatis/user.xml"/>    </mappers></configuration>

参考:http://www.jianshu.com/p/5ef281100bb6/
http://blog.csdn.net/qincidong/article/details/76120968

方法四
上文提到过的,什么也不用做,直接在mapper接口中写方法就Ok了;这种功能集成太少,没有插件;

    @Select("select id from table1")     public int getMsg3();

前三种方法其实最终目的都一样
方法一和方法二其实差不多,都是通过手动注解的方式将mybatis和分页加载;
而方法三则是系统自动加载,个人推荐方法三;

原创粉丝点击