mybatis查询无命中记录时返回的list为[null] size为1

在使用Mybatis查询数据的时候,设定查询条件,使其没有命中纪录,这时返回的内容为[null],size为1,因此通过null == list无法判断,0 == list.size()也无法判断,甚至借鉴了CollectionUtils.isEmpty(list)去判断是否为空,但都不好使。

当然,我们知道了返回的数据格式,必然有办法对这种情况下的list进行处理,但是还是对这种情况不理解,对比和之前使用相同方式获取数据的sql,唯一的不同就是这次我们使用了SUM()复合函数

将复合函数干掉以后,正常了,无数据时,变成了之前的[]。

因此,在使用复合函数并且返回list样式的时候,可以使用if(1 == list.size()&& null == list.get(0) || 0 == list.size())来判断,这样无论是返回[null]还是返回[],都可以在这个判断中处理。

做下记录,将来忘记了方便查找。

 

### MyBatis-Plus 中 `getTotal` 返回 0 的原因 在使用 MyBatis-Plus 进行分页查询,如果发现 `getTotal()` 方法返回 0,通常有以下几个可能的原因: #### 1. 分页插件未正确配置 MyBatis-Plus 的分页功能依赖于分页插件的拦截器来动态修改 SQL 查询语句。如果没有正确配置分页插件,则不会触发分页逻辑,导致总记录数无法计算。 为了确保分页插件已正确加载并生效,可以在 Spring Boot 应用程序中添加如下配置[^2]: ```java @Configuration public class MybatisPlusConfig { @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } } ``` #### 2. 数据源为空或无符合条件的数据 当数据库表确实不存在任何数据,或者查询条件过于严格以至于没有任何匹配项,`getTotal()` 将会返回 0。此建议先执行一次不带分页参数的基础查询,确认是否存在预期中的数据。 可以通过简单的测试方法验证这一点: ```java @Test void testDataExistence() { List<User> users = userMapper.selectList(null); System.out.println(users.size()); } ``` #### 3. 使用了错误的 Page 对象实例化方式 创建 `Page<T>` 实例传入了不当的参数也会造成统计总数异常。应严格按照官方文档推荐的方式初始化分页对象,并指定合理的当前页码和每页大小。 正确的做法应该是这样[^3]: ```java // 正确的做法 Page<User> page = new Page<>(current, size); IPage<User> iPage = userMapper.selectPage(page, null); System.out.println(iPage.getTotal()); // 输出总条目数量 iPage.getRecords().forEach(System.out::println); // 遍历分页后的列表 ``` ### 解决方案总结 针对上述提到的各种情况,可以采取以下措施解决问题: - **检查分页插件** 是否已经注册到 MyBatis Plus 的全局配置当中; - **核实目标表格内是否有实际存在的有效数据** 或者调整查询条件使之能够命中更多记录; - **按照标准语法构建 Page 对象**, 并传递给对应的 Mapper 接口完成最终调用; 通过以上手段应该能有效地排查并修复 `getTotal()` 函数总是给出零值的现象。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值