MyBatis-Plus 分页查询基本用法

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)机制。

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis-Plus 是一个 MyBatis 的增强工具包,提供了很多方便的功能和特性,其中包括分页查询插件。使用 MyBatis-Plus分页查询插件可以简化分页查询的操作。 在 MyBatis-Plus 中,分页查询可以通过 `Page` 对象和 `PageHelper` 工具类来实现。下面是使用 MyBatis-Plus 进行分页查询的示例代码: 1. 首先,添加 MyBatis-Plus 和分页插件的依赖到你的项目中。你可以在项目的 pom.xml 文件中添加以下依赖: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>最新版本</version> </dependency> ``` 2. 创建一个 `Page` 对象,并设置分页参数: ```java // 创建一个 Page 对象 Page<User> page = new Page<>(current, size); // 设置分页参数 page.setPages(current); // 当前页码 page.setSize(size); // 每页显示的记录数 ``` 3. 在 MyBatis 的 Mapper 接口中使用 `@Param` 注解传递 `Page` 对象,并在 SQL 中使用 MyBatis-Plus 提供的分页查询方法: ```java @Mapper public interface UserMapper extends BaseMapper<User> { List<User> selectUserPage(@Param("page") Page<User> page, @Param("name") String name); } ``` 4. 在 Service 层中调用分页查询方法: ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public IPage<User> getUserPage(long current, long size, String name) { Page<User> page = new Page<>(current, size); return userMapper.selectUserPage(page, name); } } ``` 这样,你就可以使用 MyBatis-Plus分页查询插件进行分页查询了。记得在你的 SQL 语句中使用 MyBatis-Plus 提供的分页查询方法,而不是传统的 LIMIT 语句。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值