Skip to content

BaseMapper中提供了2个方法进行分页查询,分别是selectPage和selectMapsPage,前者会将查询的结果封装成Java实体对象,后者会封装成Map\<String,Object\>。分页查询的食用示例如下 1. 创建mp的分页拦截器,注册到Spring容器中

packagecom.example.mp.config; importcom.baomidou.mybatisplus.annotation.DbType; importcom.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; importcom.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; importorg.springframework.context.annotation.Bean; importorg.springframework.context.annotation.Configuration;

@ConfigurationpublicclassMybatisPlusConfig{

/** 新版

mp /@BeanpublicMybatisPlusInterceptor mybatisPlusInterceptor(){ MybatisPlusInterceptorinterceptor=newMybatisPlusInterceptor(); interceptor.addInnerInterceptor(newPaginationInnerInterceptor(DbType.MYSQL)); returninterceptor; } / 旧版mp 用 PaginationInterceptor **/} 复制代码 2. 执行分页查询

@TestpublicvoidtestPage(){ LambdaQueryWrapper<User> wrapper = newLambdaQueryWrapper<>(); wrapper.ge(User::getAge, 28); // 设置分页信息, 查第3页, 每页2条数据

Page<User> page = newPage<>(3, 2); // 执行分页查询

Page<User> userPage = userMapper.selectPage(page, wrapper); System.out.println(" 总记录数

= "+ userPage.getTotal()); System.out.println(" 总页数

= "+ userPage.getPages()); System.out.println(" 当前页码

= "+ userPage.getCurrent()); // 获取分页查询结果

List<User> records = userPage.getRecords(); records.forEach(System.out::println); } 复制代码 3. 结果

4. 其他 • 注意到,分页查询总共发出了2次SQL,一次查总记录数,一次查具体数据。若希望不查总记录数,仅查分页结果。可以通过Page的重载构造函数,指定isSearchCount为false即可 publicPage(longcurrent, longsize, booleanisSearchCount)复制代码 • 在实际开发中,可能遇到多表联查的场景,此时BaseMapper中提供的单表分页查询的方法无法满足需求,需要自定义SQL,示例如下(使用单表查询的SQL进行演示,实际进行多表联查时,修改SQL语句即可) 1. 在mapper接口中定义一个函数,接收一个Page对象为参数,并编写自定义

SQL // 这里采用纯注解方式。当然,若SQL比较复杂,建议还是采用XML的方式@Select("SELECT * FROM user ${ew.customSqlSegment}")Page\<User\> selectUserPage(Page\<User\> page, @Param(Constants.WRAPPER)Wrapper\<User\> wrapper); 复制代码 2. 执行查询

@TestpublicvoidtestPage2(){ LambdaQueryWrapper<User> wrapper = newLambdaQueryWrapper<>(); wrapper.ge(User::getAge, 28).likeRight(User::getName, " 王

"); Page<User> page = newPage<>(3,2); Page<User> userPage = userMapper.selectUserPage(page, wrapper); System.out.println(" 总记录数

= "+ userPage.getTotal()); System.out.println(" 总页数

= "+ userPage.getPages()); userPage.getRecords().forEach(System.out::println); } 复制代码 3. 结果

本站总访问 — 次