温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

MyBatis-Plus分页查询的方法有哪些

发布时间:2022-03-07 09:58:57 来源:亿速云 阅读:490 作者:iii 栏目:开发技术

MyBatis-Plus分页查询的方法有哪些

MyBatis-Plus 是 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,简化开发、提高效率。其中,分页查询是日常开发中非常常见的需求。MyBatis-Plus 提供了多种分页查询的方法,本文将详细介绍这些方法及其使用场景。

1. 使用 Page 对象进行分页查询

Page 是 MyBatis-Plus 提供的一个分页对象,通过它可以方便地进行分页查询。

1.1 基本用法

import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; public void testPage() { // 创建分页对象,当前页为1,每页显示10条 Page<User> page = new Page<>(1, 10); // 创建查询条件 QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(User::getAge, 20); // 执行分页查询 IPage<User> userPage = userMapper.selectPage(page, queryWrapper); // 获取分页数据 List<User> userList = userPage.getRecords(); long total = userPage.getTotal(); long pages = userPage.getPages(); System.out.println("总记录数:" + total); System.out.println("总页数:" + pages); System.out.println("当前页数据:" + userList); } 

1.2 说明

  • Page<User> 是分页对象,构造函数中的两个参数分别是当前页码和每页显示的记录数。
  • QueryWrapper<User> 是查询条件构造器,用于构建查询条件。
  • selectPage 方法用于执行分页查询,返回一个 IPage 对象,其中包含了分页数据、总记录数、总页数等信息。

2. 使用 PaginationInterceptor 进行分页

PaginationInterceptor 是 MyBatis-Plus 提供的一个分页插件,通过配置该插件可以实现自动分页。

2.1 配置 PaginationInterceptor

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MybatisPlusConfig { @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } } 

2.2 使用分页插件

配置好 PaginationInterceptor 后,在查询时只需要传入 Page 对象即可,MyBatis-Plus 会自动进行分页。

public void testPaginationInterceptor() { // 创建分页对象,当前页为1,每页显示10条 Page<User> page = new Page<>(1, 10); // 执行分页查询 IPage<User> userPage = userMapper.selectPage(page, null); // 获取分页数据 List<User> userList = userPage.getRecords(); long total = userPage.getTotal(); long pages = userPage.getPages(); System.out.println("总记录数:" + total); System.out.println("总页数:" + pages); System.out.println("当前页数据:" + userList); } 

2.3 说明

  • PaginationInterceptor 是 MyBatis-Plus 提供的分页插件,配置后会自动拦截 SQL 语句并添加分页逻辑。
  • 使用分页插件后,查询时只需要传入 Page 对象即可,无需手动编写分页 SQL。

3. 使用 PageHelper 进行分页

PageHelper 是一个常用的分页插件,MyBatis-Plus 也支持与 PageHelper 集成使用。

3.1 配置 PageHelper

import com.github.pagehelper.PageHelper; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.Properties; @Configuration public class PageHelperConfig { @Bean public PageHelper pageHelper() { PageHelper pageHelper = new PageHelper(); Properties properties = new Properties(); properties.setProperty("offsetAsPageNum", "true"); properties.setProperty("rowBoundsWithCount", "true"); properties.setProperty("reasonable", "true"); pageHelper.setProperties(properties); return pageHelper; } } 

3.2 使用 PageHelper 进行分页

import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; public void testPageHelper() { // 开始分页,当前页为1,每页显示10条 PageHelper.startPage(1, 10); // 执行查询 List<User> userList = userMapper.selectList(null); // 获取分页信息 PageInfo<User> pageInfo = new PageInfo<>(userList); System.out.println("总记录数:" + pageInfo.getTotal()); System.out.println("总页数:" + pageInfo.getPages()); System.out.println("当前页数据:" + pageInfo.getList()); } 

3.3 说明

  • PageHelper 是一个独立的分页插件,MyBatis-Plus 也支持与其集成使用。
  • PageHelper.startPage 方法用于开始分页,传入当前页码和每页显示的记录数。
  • PageInfoPageHelper 提供的分页信息对象,包含了分页数据、总记录数、总页数等信息。

4. 使用 LambdaQueryWrapper 进行分页查询

LambdaQueryWrapper 是 MyBatis-Plus 提供的一个基于 Lambda 表达式的查询条件构造器,可以简化查询条件的编写。

4.1 基本用法

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; public void testLambdaQueryWrapper() { // 创建分页对象,当前页为1,每页显示10条 Page<User> page = new Page<>(1, 10); // 创建查询条件 LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(User::getAge, 20); // 执行分页查询 IPage<User> userPage = userMapper.selectPage(page, lambdaQueryWrapper); // 获取分页数据 List<User> userList = userPage.getRecords(); long total = userPage.getTotal(); long pages = userPage.getPages(); System.out.println("总记录数:" + total); System.out.println("总页数:" + pages); System.out.println("当前页数据:" + userList); } 

4.2 说明

  • LambdaQueryWrapper 是 MyBatis-Plus 提供的一个基于 Lambda 表达式的查询条件构造器,可以简化查询条件的编写。
  • 使用 LambdaQueryWrapper 可以避免硬编码字段名,提高代码的可读性和可维护性。

5. 使用 PageWrapper 进行自定义分页查询

在某些场景下,可能需要自定义分页查询逻辑,此时可以结合 PageWrapper 进行自定义分页查询。

5.1 基本用法

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; public void testCustomPage() { // 创建分页对象,当前页为1,每页显示10条 Page<User> page = new Page<>(1, 10); // 创建查询条件 QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(User::getAge, 20); // 执行自定义分页查询 IPage<User> userPage = userMapper.selectCustomPage(page, queryWrapper); // 获取分页数据 List<User> userList = userPage.getRecords(); long total = userPage.getTotal(); long pages = userPage.getPages(); System.out.println("总记录数:" + total); System.out.println("总页数:" + pages); System.out.println("当前页数据:" + userList); } 

5.2 说明

  • selectCustomPage 是一个自定义的分页查询方法,需要在 UserMapper 中定义。
  • 自定义分页查询方法可以根据业务需求编写复杂的 SQL 语句,灵活性更高。

6. 总结

MyBatis-Plus 提供了多种分页查询的方法,开发者可以根据实际需求选择合适的方式。无论是使用 Page 对象、PaginationInterceptor 插件,还是与 PageHelper 集成,MyBatis-Plus 都能满足大多数分页查询的需求。对于复杂的业务场景,还可以结合 Wrapper 进行自定义分页查询,灵活性非常高。

通过本文的介绍,相信大家对 MyBatis-Plus 的分页查询方法有了更深入的了解,能够在实际开发中灵活运用这些方法,提高开发效率。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI