spring boot之mybatis分页多种方法

我们讲一下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")
@SpringBootApplication
public 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
@EnableTransactionManagement
public 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和分页加载;
而方法三则是系统自动加载,个人推荐方法三;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值