MyBatis-Plus 分页查询基本用法

avatar
作者
筋斗云
阅读量:0

目录

MyBatis-Plus 分页查询概述

MyBatis-Plus 的分页功能是通过拦截 MyBatis 的查询操作,动态地修改 SQL 语句来实现的。它支持多种数据库的分页查询,包括 MySQL、PostgreSQL、SQL Server 和 Oracle 等。

核心概念

  1. Page:分页参数和分页结果的载体。它包括当前页码、每页记录数、总记录数、总页数和当前页的数据列表等属性。

  2. IPage:分页查询结果的接口,继承自 java.util.List 接口。

  3. PageInfo:封装了 Page 对象的额外信息,如每个页面的导航信息等。

  4. QueryWrapper:用于构建查询条件的包装器,支持链式调用和 lambda 表达式。

  5. OrderItem:用于定义排序规则的类。

分页查询的实现步骤

  1. 定义 Mapper 接口

    Mapper 接口应该继承 BaseMapper<T>IService<T>,其中 T 是你的实体类。

    @Mapper public interface UserMapper extends BaseMapper<User> {     // 可以添加自定义方法 } 
  2. 配置 MyBatis-Plus

    在配置类或配置文件中配置 MyBatis-Plus,包括 Mapper 扫描路径、类型别名包等。

    # application.properties mybatis-plus.mapper-locations=classpath*:/mapper/*.xml mybatis-plus.type-aliases-package=com.example.demo.entity 
  3. 创建 Page 对象

    在需要进行分页查询的地方创建一个 Page 对象,并设置当前页码、每页记录数等参数。

    Page<User> page = new Page<>(1, 10); 
  4. 编写 QueryWrapper

    使用 QueryWrapper 构建查询条件,支持链式调用和 lambda 表达式。

    QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("status", 1); 
  5. 调用分页查询方法

    在 Mapper 接口中调用分页查询方法,如 selectPage。将 Page 对象和 QueryWrapper 作为参数传入。

    IPage<User> userPage = userMapper.selectPage(page, queryWrapper); 
  6. 处理分页结果

    从返回的 IPage 对象中获取总记录数、总页数和当前页的数据列表等信息。

    long totalRecords = userPage.getTotal(); long totalPage = userPage.getPages(); List<User> users = userPage.getRecords(); 
  7. 排序

    在创建 Page 对象时,可以设置排序规则。MyBatis-Plus 会自动将排序规则应用到查询中。

    List<OrderItem> orders = new ArrayList<>(); orders.add(new OrderItem("age", SortOrder.ASC)); orders.add(new OrderItem("create_time", SortOrder.DESC)); Page<User> page = new Page<>(1, 10, orders); 
  8. 自定义分页逻辑

    如果需要自定义分页逻辑,可以重写 BaseMapper<T> 中的 selectPage 方法。这样,你就可以根据实际需求调整分页查询的 SQL 语句。

  9. 使用 PageInfo

    PageInfo 封装了 Page 对象的额外信息,如每个页面的导航信息。在 Service 层或 Controller 层返回 PageInfo 对象,可以方便地展示分页导航。

    PageInfo<User> pageInfo = new PageInfo<>(userPage.getRecords()); return pageInfo; 

注意事项

  1. 性能优化:确保在 WHERE 子句中使用的字段上有索引,以提高查询性能。

  2. 数据库兼容性:MyBatis-Plus 支持多种数据库的分页查询,但不同数据库的分页语句可能有所不同。确保你了解所使用的数据库的分页机制。

  3. 参数验证:在实际应用中,应该对传入的分页参数进行验证,避免出现负数或不合理的参数。

  4. 分页参数动态设置:分页参数(如当前页码和每页记录数)应该根据前端请求进行动态设置,而不是硬编码在代码中。

  5. 自定义拦截器:如果需要对分页查询进行更细粒度的控制,可以考虑使用 MyBatis 的拦截器(Interceptor)机制。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!