Mybatis-Plus 多表联查分页

  • 2018-09-30
  • 0
  • 0

分析

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

  1. 配置拦截器
    [java]
    @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();
    }
    }
    [/java]

  2. service

[java]
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);
[/java]

  1. mapper

[java]
List<CommentDTO> getDataList(Pagination page , DataListQO qo);
[/java]

最后将结果集 set 到 page 对象中:
[java]
page.setRecords(dtoList);
[/java]

page 对象的 json 结构如下:
[xml]
{
"total": 48,//总记录
"size": 10,//每页显示多少条
"current": 1,//当前页
"records": [//结果集 数组
{…},
{…},
{…},

],
"pages": 5 // 总页数
}
[/xml]
以上

评论

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