java使用插件pagehelper在mybatis中实现分页查询中total错误

在使用MyBatis进行数据查询时遇到了由于嵌套查询collection导致的总数计算异常。问题在于计算total时出现了错误。为了解决这个问题,采取了重新设置total的方法,通过list.size()获取正确的数据条数,从而修复了异常。

由于mybatis中实现了嵌套查询collection,进而计算数据总条数total异常

现在解决办法,重新setTotal(list.size());

MyBatis实现分页查询主要有两种方式: --- ## ✅ 一、使用 `LIMIT` + 手动传参(推荐基础方式) 这是最基础的实现方式,适用于对 SQL 有完全控制的场景。 ### 1. Mapper 接口定义: ```java public interface TrainingLogMapper { List<TrainingLogVO> selectByPage(@Param("offset") int offset, @Param("pageSize") int pageSize); int count(); } ``` ### 2. XML 映射文件定义: ```xml <!-- 查询分页数据 --> <select id="selectByPage" resultType="TrainingLogVO"> SELECT * FROM training_log ORDER BY create_time DESC LIMIT #{offset}, #{pageSize} </select> <!-- 查询总记录数 --> <select id="count" resultType="int"> SELECT COUNT(*) FROM training_log </select> ``` ### 3. Service 层调用示例: ```java public PageResult<TrainingLogVO> getPage(int pageNum, int pageSize) { int offset = (pageNum - 1) * pageSize; List<TrainingLogVO> list = trainingLogMapper.selectByPage(offset, pageSize); int total = trainingLogMapper.count(); return new PageResult<>(list, pageNum, pageSize, total); } ``` --- ## ✅ 二、使用 MyBatis 分页插件(如 PageHelper使用 PageHelper 插件可以实现**自动分页**,无需手动计算 offset 和 pageSize。 ### 1. 添加依赖(Maven): ```xml <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.4.2</version> </dependency> ``` ### 2. Mapper 接口定义: ```java public interface TrainingLogMapper { List<TrainingLogVO> getAll(); } ``` ### 3. XML 映射文件: ```xml <select id="getAll" resultType="TrainingLogVO"> SELECT * FROM training_log ORDER BY create_time DESC </select> ``` ### 4. Service 层调用示例: ```java public PageResult<TrainingLogVO> getPage(int pageNum, int pageSize) { PageHelper.startPage(pageNum, pageSize); // 自动拦截下一条查询 List<TrainingLogVO> list = trainingLogMapper.getAll(); PageInfo<TrainingLogVO> pageInfo = new PageInfo<>(list); return new PageResult<>( pageInfo.getList(), pageInfo.getPageNum(), pageInfo.getPageSize(), (int) pageInfo.getTotal() ); } ``` --- ## ✅ 三、使用 MyBatis Plus 分页插件(适合使用 MyBatis Plus 的项目) MyBatis Plus 提供了内置的分页插件和 `Page` 对象。 ### 1. 配置分页插件(Spring Boot 配置类): ```java @Configuration public class MyBatisPlusConfig { @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } } ``` ### 2. Mapper 接口定义: ```java public interface TrainingLogMapper extends BaseMapper<TrainingLog> { } ``` ### 3. Service 层调用示例: ```java public PageResult<TrainingLogVO> getPage(int pageNum, int pageSize) { Page<TrainingLog> page = new Page<>(pageNum, pageSize); IPage<TrainingLog> result = trainingLogMapper.selectPage(page, null); List<TrainingLogVO> voList = convertToVO(result.getRecords()); return new PageResult<>( voList, pageNum, pageSize, (int) result.getTotal() ); } ``` --- ## ✅ 四、总结对比 | 方式 | 是否手动分页 | 是否依赖插件 | 特点 | |------|---------------|----------------|------| | 使用 `LIMIT` 手动传参 | ✅ 是 | ❌ 否 | 灵活,适合自定义 SQL | | PageHelper 插件 | ❌ 否 | ✅ 是 | 简洁,适合通用分页场景 | | MyBatis Plus 分页 | ❌ 否 | ✅ 是 | 适合已使用 MP 的项目,集成方便 | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值