MyBatis-Plus 分页实战
01 Spring Boot集成MyBatis-Plus
数据准备:构建基础环境
user 表结构:
DROP TABLE IF EXISTS `user1`;
CREATE TABLE `user1` (`id` intNOT NULL AUTO_INCREMENT COMMENT '用户id',`name` varchar(64) DEFAULTNULL COMMENT '用户名称',`phone` varchar(64) DEFAULTNULL COMMENT '用户电话',`age` intDEFAULTNULL COMMENT '用户年龄',`address` varchar(128) DEFAULTNULL COMMENT '用户地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11DEFAULT CHARSET=utf8 COMMENT='用户表';
初始数据插入:
insert into `user1`(`id`,`name`,`phone`,`age`,`address`) values
(1,'孙一','13800138002',27,'西安市雁塔区'),
(2,'黄二','13900139002',31,'青岛市市南区'),
(3,'张三','13800138000',30,'北京市海淀区'),
(4,'李四','13900139000',25,'上海市浦东新区'),
(5,'王五','13600136000',35,'广州市天河区'),
(6,'赵六','13700137000',28,'深圳市南山区'),
(7,'陈七','13800138001',22,'杭州市西湖区'),
(8,'周八','13900139001',32,'南京市鼓楼区'),
(9,'吴九','13600136001',40,'成都市武侯区'),
(10,'郑十','13700137001',33,'武汉市江汉区');
环境配置:搭建高效开发框架
POM依赖引入
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.2</version>
</dependency>
YML配置优化
spring:datasource:username:rootpassword:123456driver-class-name:com.mysql.cj.jdbc.Driverurl:jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8druid:initialSize:5minIdle:10maxActive:20maxWait:60000mybatis-plus:
mapper-locations:classpath*:mapper/*Mapper.xml
typeAliasesPackage:org.example.pojo
global-config:db-config:id-type:auto
configuration:call-setters-on-nulls:truemap-underscore-to-camel-case:trueobject-wrapper-factory: com.baomidou.mybatisplus.extension.MybatisMapWrapperFactory
MyBatisPlusConfig增强配置
@Configuration
public class MybatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();// 添加分页拦截器PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);paginationInnerInterceptor.setOverflow(false); // 禁止分页溢出paginationInnerInterceptor.setMaxLimit(1000L); // 设置最大分页限制interceptor.addInnerInterceptor(paginationInnerInterceptor);return interceptor;}
}
注解:
- 通过@Configuration注解标识配置类
- 使用MybatisPlusInterceptor整合分页拦截器
- 配置分页核心参数,保障系统稳定性和性能
02 实现 分页查询
UserServiceImpl实现
@Service
publicclassUserServiceImplextendsServiceImpl<UserMapper, User> implementsIUserService {@Autowiredprivate UserMapper userMapper;/*** 获取用户分页列表* @return 分页结果集*/@Overridepublic IPage<User> getUserPage() {// 创建分页对象,参数:当前页,每页大小Page<User> page = newPage<>(1, 5);// 执行分页查询,自动计算总数和数据列表return userMapper.selectPage(page, newLambdaQueryWrapper<>());}/*** 获取用户分页Map集合* @return 分页结果集*/@Overridepublic IPage<Map<String, Object>> getUserPageMap() {Page<User> page = newPage<>(1, 5);LambdaQueryWrapper<User> queryWrapper = newLambdaQueryWrapper<>();// 选择特定字段并排序queryWrapper.select(User::getName, User::getPhone).orderByDesc(User::getId);// 返回Map形式的分页结果return userMapper.selectMapsPage(page, queryWrapper);}
}
注解:
- 继承ServiceImpl泛型实现,复用MyBatis-Plus通用逻辑
- 使用LambdaQueryWrapper构建查询条件,提升代码可读性
- selectPage与selectMapsPage方法自动完成分页查询与封装
分页结果核心参数说明
• records:当前页数据记录列表
• total:总记录数
• size:每页显示记录数
• current:当前页码
• pages:总页数