您的位置:

MyBatis-Plus多表分页详解

一、MyBatis-Plus多表分页查询

MyBatis-Plus是一个基于MyBatis框架之上的增强工具,在MyBatis的基础上只做增强不做改变,在向上兼容MyBatis的同时,完美整合Spring框架,通过自定义注入的方式,方便地实现了单表操作和多表之间的复杂联合查询。在使用MyBatis-Plus进行多表分页查询时,可以通过Wrapper对象来创建查询条件,最终通过Page对象实现分页查询。下面是一些使用MyBatis-Plus的示例代码:

    // 多表分页查询示例
    IPage<Map<String,Object>> page = new Page<>(pageNum,pageSize);
    String condition = "xxx"; //查询条件
    page = customMapper.customQueryPage(page,condition);
    // 结果输出
    List<Map<String,Object>> list = page.getRecords();
    long total = page.getTotal();

二、MyBatis-Plus多表分页查询怎么用

MyBatis-Plus的分页查询方式相对于MyBatis的分页查询来说更加的简单和易用,只需要传入IPage对象即可实现分页查询,具体实现参考下面的示例:

    // 分页查询
    IPage<BookVO> resultPage = new Page<>(pageNum,pageSize);
    resultPage = bookMapper.queryBookByPage(resultPage, categoryId);
    // 结果输出
    List<BookVO> resultList = resultPage.getRecords();
    long total = resultPage.getTotal();

三、MyBatis-Plus多表分页传参数过滤

在进行多表联合查询时,经常需要根据外键关联进行查询,如对于某一个订单表需要对用户表进行关联查询。MyBatis-Plus提供了一些参数过滤的方法以及Lambda表达式的支持,使得多表之间的关联查询更方便,如下所示:

    // Lambda查询
    IPage<Map<String,Object>> resultPage = new Page<>(pageNum,pageSize);
    resultPage = testMapper.selectMapsPage(resultPage,
    new QueryWrapper<Test>().lambda()
        .eq(Test::getStatus,1)
        .like(Test::getName,"Jack")
        .inSql(Test::getId,"select tid from tag_test where tid is not null")
    );

四、MyBatis多表分页查询

在使用MyBatis进行多表分页查询时,需要手写SQL语句进行联表查询,再通过MyBatis的RowBounds对象控制分页结果,或者使用MyBatis的插件PageHelper来控制分页结果。相对于MyBatis-Plus的灵活性而言,MyBatis在进行多表联查时需要手写SQL,工作量较大。以下是一个使用MyBatis进行多表分页查询的示例:

    // 多表分页查询示例
    RowBounds bounds = new RowBounds(start,pageSize);
    List<Map<String,Object>> list = sqlSession.selectList("tableName.selectList",paramMap,bounds);
    long total = sqlSession.selectOne("tableName.selectListCount",paramMap);

五、MyBatis-Plus多表联查结果分页

MyBatis-Plus的分页方式同样支持多表联查的结果分页,只需要在创建Wrapper对象时设置多表联查条件,然后再将Wrapper对象作为参数传递给IPage对象即可实现多表联查的结果分页。下面是一个示例代码:

    // 多表联查结果分页示例
    IPage<Map<String,Object>> page = new Page<>(pageNum,pageSize);
    String condition = "xxx"; //查询条件
    QueryWrapper<Map<String,Object>> wrapper = new QueryWrapper<>();
    wrapper.select("table1.id","table1.name","table2.code")
            .inSql("table1.id","select table_id from table_relation where category_id = xxx")
            .orderByDesc("table1.create_time");
    page = customMapper.customQueryPage(page,wrapper);
    // 结果输出
    List<Map<String,Object>> list = page.getRecords();
    long total = page.getTotal();

六、MyBatis-Plus的分页

MyBatis-Plus的分页方式非常简单,只需要创建一个Page对象并传入当前页和每页显示条数,然后将Page对象作为参数传入Mapper方法中即可实现分页查询。以下是一个简单的示例代码:

    // 简单分页示例
    IPage<User> page = new Page<>(pageNum,pageSize);
    QueryWrapper<User> wrapper = new QueryWrapper<>();
    // 查询条件
    wrapper.like("name","tom");
    page = userMapper.selectPage(page,wrapper);
    // 结果输出
    List<User> list = page.getRecords();
    long total = page.getTotal();

七、MyBatisPlus联表分页查询

MyBatisPlus的联表分页查询和普通的多表分页查询类似,只需要创建一个IPage对象,并将查询条件封装在Wrapper对象中,然后作为参数传入Mapper方法中,注意不同的Mapper方法如下所示:

    // 联表分页查询示例
    IPage<Map<String,Object>> page = new Page<>(pageNum,pageSize);
    String condition = "xxx"; //查询条件
    QueryWrapper<Map<String,Object>> wrapper = new QueryWrapper<>();
    wrapper.table("table1 t1")
            .leftJoin("table2 t2 on t1.id = t2.table_id");
    page = customMapper.customQueryPage(page,wrapper);
    // 结果输出
    List<Map<String,Object>> list = page.getRecords();
    long total = page.getTotal();

八、MyBatisPlus分页查询

MyBatisPlus的分页查询是一种在Mapper接口上进行分页查询的方法,在Mapper接口上添加一个默认的分页查询方法即可快速实现分页查询。并且MyBatisPlus提供了IPage对象内置的分页方法,可以更加方便地实现分页查询。以下是一个示例代码:

    // 分页查询示例
    IPage<User> page = new Page<>(pageNum,pageSize);
    QueryWrapper<User> wrapper = new QueryWrapper<>();
    // 查询条件
    wrapper.select("id","name","age")
            .in("age",Arrays.asList(18,20,21))
            .orderByDesc("create_time");
    userMapper.selectPage(page,wrapper);
    // 结果输出
    List<User> list = page.getRecords();
    long total = page.getTotal();

九、MyBatisPlus分表查询

MyBatisPlus的分表查询是一种利用Sharding-Jdbc进行分表查询的方法,可以将普通的Mapper方法进行分表操作,同时也可以进行多表间的关联查询。Sharding-Jdbc是一款轻量级的Java框架,提供了分库分表的功能支持,透明化数据分片,支持分布式事务,可插拔的式架构,可以结合Spring、SpringBoot、MyBatis、JPA等使用。以下是一个示例代码:

    // 分表查询示例
    IPage<Map<String,Object>> page = new Page<>(pageNum,pageSize);
    String condition = "xxx"; //查询条件
    QueryWrapper<Map<String,Object>> wrapper = new QueryWrapper<>();
    wrapper.eq("name","tom").or().like("name","Jack");
    page = customMapper.customQueryPage(page,wrapper);
    // 结果输出
    List<Map<String,Object>> list = page.getRecords();
    long total = page.getTotal();

结论

本篇文章对MyBatis-Plus多表分页查询进行了详细的阐述,包括MyBatis-Plus多表分页查询、MyBatis-Plus多表分页查询怎么用、MyBatis-Plus多表分页传参数过滤、MyBatis多表分页查询、MyBatis-Plus多表联查结果分页、MyBatisPlus的分页、MyBatisPlus联表分页查询以及MyBatisPlus分表查询等方面进行了深入的介绍。希望本篇文章能够对各位开发者有所帮助。