Mybatis-Plus 多表联查分页

  • 2018-09-30
  • 0
  • 0
  • 0

分析

使用的工程,依旧是 spring-boot,关于分页,官网给出了一个单表的 demo,其实多表分页实现原理相同,都是通过 mybatis 的拦截器
(拦截器做了什么?他会在你的 sql 执行之前,为你做一些事情,例如分页,我们使用了 MP 不用关心 limit,拦截器为我们拼接。我们也不用关心总条数,拦截器获取到我们 sql 后,拼接 select count(*) 为我们查询总条数,添加到参数对象中)。
实现

  1. 配置拦截器
    @EnableTransactionManagement
    @Configuration
    @MapperScan("com.avcdata.demand.dao")
    public class MybatisPlusConfig {
        /**
         * mybatis-plus SQL执行效率插件【生产环境可以关闭】
         */
        @Bean
        public PerformanceInterceptor performanceInterceptor() {
            return new PerformanceInterceptor();
        } /* * 分页插件,自动识别数据库类型 多租户,请参考官网【插件扩展】 */
    
        @Bean
        public PaginationInterceptor paginationInterceptor() {
            return new PaginationInterceptor();
        }
    }
    

  2. service

		Page<CommentDTO> page = new Page<>(qo.getPageNum(), qo.getPageSize());// 当前第几页,每页多少条 构造 page 对象
        List<CommentDTO> dtoList = reviseMapper.getDataList(page, qo);
        if (dtoList == null) {
            return Result.fail(StatusMappingEnum.NODATA_COMMENT_ERROR);
        }
        page.setRecords(dtoList);
        return Result.success(Constant.OK, page);
  1. mapper
List<CommentDTO> getDataList(Pagination page , DataListQO qo);

最后将结果集 set 到 page 对象中:

page.setRecords(dtoList);

page 对象的 json 结构如下:

{
    "total": 48,//总记录
    "size": 10,//每页显示多少条
    "current": 1,//当前页
    "records": [//结果集 数组
        {...},
        {...},
        {...},
         ...
    ],
    "pages": 5 // 总页数
}

以上

评论

还没有任何评论,你来说两句吧

发表评论