mybatis-plus 分页查询 total和pages为0的问题解决 并且有分页记录

本文介绍如何在SpringBoot项目中集成MybatisPlus的分页插件,通过简单配置即可实现数据的分页功能,提高数据处理效率。
@Configuration
public class MybatisPlusConfig {
/**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}

直接在springboot 注入该插件就可以

<think>好的,用户想了解如何使用MyBatis-Plus实现分页查询的示例教程。首先,我需要回忆一下MyBatis-Plus的相关知识,特别是分页功能。记得MyBatis-Plus提供了一个分页插件,通过配置拦截器来实现分页查询。用户提供的引用内容里提到了PaginationInnerInterceptor这个分页插件,需要先配置它才能使用分页功能。 接下来,用户可能需要具体的步骤,比如如何引入依赖、配置插件、编写分页代码等。根据引用[1][3],首先需要引入MyBatis-Plus的依赖,然后在配置类中添加分页插件。这一步很重要,否则分页功能无法生效。 然后,用户可能需要一个简单的示例代码。比如在Service层或Controller层中创建Page对象,调用Mapper的selectPage方法。引用[4]提到Page类的属性,比如current、size、total等,这些属性在分页查询后会被自动填充。所以示例中需要展示如何创建Page对象并传递参数。 另外,用户可能关心复杂查询的分页处理,比如使用QueryWrapper构造查询条件。引用[2]提到可以结合XML分页插件处理复杂SQL,但这里可能需要更基础的示例,先展示简单的分页,再说明如何处理带条件的分页。 还要注意分页插件的配置是否正确,比如在Spring Boot中需要定义一个配置类,并添加@Configuration注解,这样分页拦截器才会生效。引用[3]强调了配置分页插件的重要性,所以这一步不能漏掉。 用户可能还会想知道分页查询的结果如何获取,比如Page对象中的records是当前的数据列表,total是总记录数。在示例代码中需要展示如何获取这些数据,并返回给前端或其他地方使用。 最后,是否需要提到优化选项,比如optimizeCountSqlsearchCount?根据引用[4],这些属性可以用来优化性能,特别是当不需要总记录数时,可以设置为true减少数据库压力。可能在高级部分提到这些,但基础教程中可能暂时不需要,不过还是简单提一下比较好,让用户知道有这些选项存在。 总结一下,回答的结构应该是:配置分页插件 -> 引入依赖 -> 编写分页代码(创建Page对象,调用Mapper方法) -> 处理结果。同时,给出一个完整的示例,包括代码片段,并解释每个步骤的作用。可能还需要提到常见问题,比如为什么分页不生效(检查插件配置),以及如何处理带条件的分页查询。 需要确保所有的代码示例正确,比如Page的创建selectPage方法的使用是否正确。另外,引用的来源要正确标注,比如引用[3]关于配置插件,引用[4]关于Page类的属性。最后,生成相关问题,帮助用户进一步学习,比如性能优化、复杂查询分页等。</think>### MyBatis-Plus 分页查询实现步骤 #### 1. 配置分页插件 在 Spring Boot 启动类或配置类中添加分页拦截器: ```java @Configuration public class MyBatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); return interceptor; } } ``` 必须配置该插件才能启用分页功能[^3]。 #### 2. 编写分页查询代码 ```java // 创建分页对象:当前=1,每显示10Page<User> page = new Page<>(1, 10); // 执行分页查询(User是实体类,userMapper是自动注入的Mapper接口) userMapper.selectPage(page, null); // 获取分页结果 List<User> records = page.getRecords(); // 当前数据 long total = page.getTotal(); // 总记录数 long pages = page.getPages(); // 总数 ``` 通过 `Page` 对象封装分页参数结果[^4]。 #### 3. 带条件的分页查询 ```java QueryWrapper<User> wrapper = new QueryWrapper<>(); wrapper.like("name", "张"); Page<User> page = new Page<>(1, 10); userMapper.selectPage(page, wrapper); ``` 可结合 `QueryWrapper` 构建动态查询条件[^2]。 #### 4. 自定义 SQL 分页 在 XML 映射文件中编写 SQL: ```xml <select id="selectUserPage" resultType="User"> SELECT * FROM user WHERE age > #{param1} </select> ``` Mapper 接口定义: ```java Page<User> selectUserPage(Page<User> page, @Param("age") Integer age); ``` ### 完整示例代码 ```java @RestController @RequestMapping("/users") public class UserController { @Autowired private UserMapper userMapper; @GetMapping public PageResult<User> getUsers(int current, int size) { Page<User> page = new Page<>(current, size); userMapper.selectPage(page, null); return new PageResult<>(page.getRecords(), page.getTotal()); } } ``` ### 注意事项 - 分页参数必须通过 `Page` 对象传递 -记录数查询默认开启,可通过 `page.setSearchCount(false)` 禁用 - 复杂分页查询建议使用 XML 方式实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值