srping boot 与mybatis的整合就不在贴代码了,请看我以前的整和文章:
我的Spring Boot 版本:1.5.9
我的mybatis分页插件pagehelper版本:5.1.2
我在开始整合的时候,还是用的5.0以前的整合方式:
@Bean(name = "sqlSessionFactory") public SqlSessionFactory sqlSessionFactory(DataSource dataSource) { SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean(); try { sqlSessionFactoryBean.setDataSource(dataSource); // 设置别名包(实体类) sqlSessionFactoryBean.setTypeAliasesPackage("com.xin.dream.pojo"); // 设置mybatis的主配置文件 ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); //设置sql配置文件路径 sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath*:com/xin/dream/mapper/*.xml")); //分页插件 PageHelper page = new PageHelper(); //采坑:我用的分页插件是最新的,5.0以后就不再是PageHelper了 Properties properties = new Properties(); properties.setProperty("dialect", "mysql"); properties.setProperty("reasonable", "false"); properties.setProperty("pageSizeZero", "true"); page.setProperties(properties); sqlSessionFactoryBean.setPlugins(new Interceptor[]{page}); return sqlSessionFactoryBean.getObject(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); throw new RuntimeException(e); } }
我是5.1的,结果采坑 : sqlSessionFactoryBean.setPlugins(new Interceptor[]{page});
报错:Type mismatch: cannot convert from PageHelper to Interceptor这里我发现转换失败,没办法,只能在github上找最新的PageHelper的文档了。
突然发现这儿坑还挺多的。下面我就把PageHelper 5.0与以前版本不一样的地方给贴出来。- 使用 QueryInterceptor 规范 处理分页逻辑 新的分页插件拦截器为 com.github.pagehelper.PageInterceptor 新的 PageHelper 是一个特殊的 Dialect
- 实现类,以更友好的方式实现了以前的功能 新的分页插件仅有 dialect 一个参数,默认的 dialect 实现类为 PageHelper
- PageHelper 仍然支持以前提供的参数,在最新的使用文档中已经全部更新 PageHelper 的 helperDialect 参数和以前的 dialect 功能一样,具体可以看文档的参数说明
- 增加了基于纯 RowBounds 和 PageRowBounds 的分页实现,在com.github.pagehelper.dialect.rowbounds 包中,这是用于作为 dialect 参数示例的实现,后面会补充更详细的文档 去掉了不适合出现在分页插件中的 orderby功能,以后会提供单独的排序插件
- 去掉了PageHelper 中不常用的方法新的文档,更新历来更新日志中提到的重要内容,提供英文版本文档 解决 bug 将 Db2RowDialect 改为Db2RowBoundsDialect 所有分页插件抛出的异常改为 PageException
根据他提供的dome新的整合方式应该是:
//分页插件PageInterceptor page = new PageInterceptor(); Properties properties = new Properties(); properties.setProperty("helperDialect", "mysql"); properties.setProperty("reasonable", "true"); properties.setProperty("supportMethodsArguments", "true");properties.setProperty("params", "count=countSql"); page.setProperties(properties); sqlSessionFactoryBean.setPlugins(new Interceptor[]{page});
使用方式(mysql为例):
sql语句:SELECT * FROM TABLE_name service中使用:public PageInfobuildCardDoctors(AppPage page) { // TODO Auto-generated method stub PageHelper.startPage(page.getCurrentPage(),page.getPageSize()); List list = dao.buildCardDoctors(); PageInfo pageInfo = new PageInfo (list); return pageInfo;}
大致就这样了...
------------------------------------------------------------------------------------------------------------另外上一篇文章: 中:
import org.mybatis.spring.mapper.MapperScannerConfigurer;import org.springframework.boot.autoconfigure.AutoConfigureAfter;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/** * @instructions 添加mybatis的mapper接口扫描 * * @PS @AutoConfigureAfter(MyBatisConfig.class): * 很多文章,和培训老师讲课,都说必须的加这个注释 * 结果我也就入坑了,其实这个注释是没的作用的, */@Configuration/*@AutoConfigureAfter(MyBatisConfig.class) */public class MyBatisMapperScannerConfig { @Bean public MapperScannerConfigurer mapperScannerConfigurer() { MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer(); mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory"); mapperScannerConfigurer.setBasePackage("com.xin.dream.dao"); return mapperScannerConfigurer; }}
@AutoConfigureAfter(MyBatisConfig.class)这个配置是无效的,很多教程都强调了配置这个,实际上MapperScannerConfigurer还是先SqlSessionFactory类加载。所以这个配置没实际意义。