Spring Boot 2.0 + MyBatis + pageHelper 多元数据库分页

继之前在MyBatis设置多元数据的情况下,在工作中又遇到了多元数据库分页失效的问题,如下是解决过程。

这里先贴上我之前解决多元数据的博客:https://blog.csdn.net/jiangxiaoyi_07/article/details/84982875

先介绍只有一个数据源的情况下pageHelper的使用方法。

首先,在启动类上加上如下代码

@Bean
PageHelper pageHelper(){
   //分页插件
   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);
   //添加插件
   new SqlSessionFactoryBean().setPlugins(new Interceptor[]{pageHelper});
   return pageHelper;
}

helperDialect:分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。

reasonable:分页合理化参数,默认值为false。当该参数设置为 true 时,pageNum<=0 时会查询第一页, pageNum>pages(超过总数时),会查询最后一页。默认false 时,直接根据参数进行查询。

params:为了支持startPage(Object params)方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值, 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值, 默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero。

supportMethodsArguments:支持通过 Mapper 接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页。

在需要分页的sql语句上一行加入,注意一定不要中间插入其他的代码

Page page = PageHelper.startPage(pageNum, pageSize);
ArrayList<Target> targets = targetMapper.findTargetsByClientId(clientId, pageNum, pageSize);

这时获取到的结果已经是分页后的结果啦~

PageInfo<Target> targetPage = new PageInfo<>(targets);
targetPage.setPages(page.getPages());
targetPage.setTotal(page.getTotal());
targetPage.setPageNum(page.getPageNum());
targetPage.setPageSize(page.getPageSize());

然后将分页相关的结果放到PageInfo对象里。

在配置了两个数据库源后,分别有如下的两个数据库配置文件,具体的可以看之前多元数据的博客,文章开头已经贴出来过。

注掉在单数据库源的情况下载启动类上加上的分页相关的代码,

然后分别在MybatisDbAConfig和MybatisDbBConfig文件加入如下的代码

@Bean
public SqlSessionFactory sqlSessionFactory1() throws Exception {
    SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
    factoryBean.setDataSource(xx1DataDataSource());//使用xx1DataDataSource()为数据源

    //分页插件
    Interceptor interceptor = new PageInterceptor();
    Properties properties = new Properties();
    properties.setProperty("helperDialect", "mysql");
    properties.setProperty("offsetAsPageNum", "true");
    properties.setProperty("rowBoundsWithCount", "true");
    properties.setProperty("reasonable", "true");
    properties.setProperty("supportMethodsArguments", "true");
    properties.setProperty("params", "pageNum=pageNumKey;pageSize=pageSizeKey;");
    interceptor.setProperties(properties);
    factoryBean.setPlugins(new Interceptor[]{interceptor});

    return factoryBean.getObject();
}

其他的使用方法和之前的单源数据库的情况是一样的了。

使用了PageHelper插件之后除了基础的查询语句之外不需要关心分页语句,因为Mybatis 的拦截器在输入的sql语句之外拼接了分页先关的语句。

猜你喜欢

转载自blog.csdn.net/jiangxiaoyi_07/article/details/86418674