分页查询是持久化框架的根本功能,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 供应了分页插件,只须要声明一下就可以实现物理分页
@Configurationpublic 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 userSELECT id,name,age,email FROM user LIMIT ?,?
如果只想查询列表,不须要统计总条数,可以利用 Page 布局方法的第三个参数进行设置
Page<User> page = new Page<>(2, 3, false);
总结
Page 是 MybatisPlus 默认实现的分页类,也可以自己实现分页类,只须要实现 IPage 接口就可以利用分页的功能。
末了关注一下,共同学习!