SpringBoot 集成 MybatisPlus 系列
SpringBoot 版本:2.6.4
MybatisPlus 版本:3.5.1
- SpringBoot整合MybatisPlus
- SpringBoot整合MybatisPlus数据自动填充
- SpringBoot整合MybatisPlus实现逻辑删除
- SpringBoot整合MybatisPlus实现分页查询
- SpringBoot整合MybatisPlus支持枚举类型
- 未完待续…
分页查询是持久化框架的基础功能,Mybatis 本身也提供了分页查询,但是 Mybatis 提供的是逻辑分页,也就是先查出所有,然后在内存中进行分布,这明显不符合生产需要。所以使用 Mybatis 时通常需要自行实现拦截器,或者使用 PageHelper 之类的框架实现物理分页。
MybatisPlua 作为 Mybatis 的 Plus 版本,当然提供了物理分页功能。
准备工作
使用 MySql 数据库,设计一张 user 表,结构如下
id | name | age | |
1 | Jone | 18 | Jone@baomidou.com |
2 | Jack | 20 | Jack@baomidou.com |
3 | Tom | 28 | Tom@baomidou.com |
4 | Sandy | 21 | Sandy@baomidou.com |
5 | Billie | 24 | Billie@baomidou.com |
数据库脚本
CREATE TABLE user (
id BIGINT(20) NOT NULL COMMENT '主键',
name VARCHAR(32) NOT NULL COMMENT '姓名',
age SMALLINT(4) NOT NULL DEFAULT '0' COMMENT '年龄',
email VARCHAR(50) NOT NULL DEFAULT '' COMMENT '邮箱',
PRIMARY KEY (id)
)数据脚本
INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'Jone@baomidou.com'),
(2, 'Jack', 20, 'Jack@baomidou.com'),
(3, 'Tom', 28, 'Tom@baomidou.com'),
(4, 'Sandy', 21, 'Sandy@baomidou.com'),
(5, 'Billie', 24, 'Billie@baomidou.com');整合 MybatisPlus 实现分页查询
MybatisPlus 提供了分页插件,只需要声明一下就可以实现物理分页
@Configuration
public class GetanJdbcAutoConfiguration {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
PaginationInnerInterceptor paginationInterceptor = new PaginationInnerInterceptor();
paginationInterceptor.setDbType(DbType.MYSQL);
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(paginationInterceptor);
return interceptor;
}
}分页插件有四个属性:
属性名 | 类型 | 默认值 | 描述 |
overflow | boolean | false | 溢出总页数后是否进行处理(默认不处理) |
maxLimit | Long | 单页分页条数限制(默认无限制) | |
dbType | DbType | 数据库类型(根据类型获取应使用的分页方言) | |
dialect | IDialect | 方言实现类 |
支持的数据库
mysql、oracle、db2、h2、hsql、sqlite、postgresql、sqlserver、Phoenix、Gauss、clickhouse、Sybase、OceanBase、Firebird、cubrid、goldilocks、csiidb
测试
编写测试用例
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class MybatisPlusTest {
@Autowired
private UserMapper userMapper;
@Test
public void testPagination() {
// 查询第 2 页,每页 3 条记录
Page<User> page = new Page<>(2, 3);
page = userRepository.selectPage(page, null);
}
}查看日志,可以看到执行了以下两个语句
SELECT COUNT(*) AS total FROM user
SELECT id,name,age,email FROM user LIMIT ?,?如果只想查询列表,不需要统计总条数,可以使用 Page 构造方法的第三个参数进行设置
Page<User> page = new Page<>(2, 3, false);总结
Page 是 MybatisPlus 默认实现的分页类,也可以自己实现分页类,只需要实现 IPage 接口就可以使用分页的功能。