MyBatisPlus插件整合分页查询功能
使用的环境如下
环境 | 版本 |
---|---|
系统 | macOS 10.15.4 |
JDK | 8 |
Maven | 3 |
MyBatisPlus | 3.4.3 |
关于搭建MyBatisPlus的内容可以参考这篇文章:Springboot整合MyBatisPlus
废话不多说,直接上代码
配置类
新版本的MP,在config包下面建一个配置类,内容如下
1 |
|
2 | public class MybatisPlusConfig { |
3 | |
4 | /** |
5 | * 分页插件 |
6 | * @return |
7 | */ |
8 | |
9 | public MybatisPlusInterceptor mybatisPlusInterceptor() { |
10 | MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); |
11 | interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2)); |
12 | return interceptor; |
13 | } |
14 | |
15 | } |
数据库
简单创建一张表
1 | CREATE TABLE `t_demo` ( |
2 | `id` bigint(20) NOT NULL AUTO_INCREMENT, |
3 | `code` varchar(20) NOT NULL, |
4 | `name` varchar(50) DEFAULT NULL, |
5 | `create_user` bigint(255) NOT NULL, |
6 | `create_time` datetime NOT NULL, |
7 | `update_user` bigint(20) DEFAULT NULL, |
8 | `update_time` datetime DEFAULT NULL, |
9 | PRIMARY KEY (`id`) |
10 | ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4; |
实体类
Demo实体类
1 |
|
2 | "t_demo") (value = |
3 | public class Demo implements Serializable { |
4 | |
5 | private static final long serialVersionUID = -3906522870557549136L; |
6 | |
7 | private Long id; |
8 | private String code; |
9 | private String name; |
10 | private Long createUser; |
11 | private Date createTime; |
12 | private Long updateUser; |
13 | private Date updateTime; |
14 | |
15 | } |
PageVO实体类
List<T>
存放列表数据
1 |
|
2 | public class PageVO<T> implements Serializable { |
3 | |
4 | private static final long serialVersionUID = -182574099663892610L; |
5 | |
6 | private Long current; |
7 | private Long size; |
8 | private Long total; |
9 | private List<T> list; |
10 | |
11 | } |
Controller
控制器中写一个查询的接口(此处代码可以封装到BaseController内,为了演示方便,故提出来)
- 定义一个
IPage<T>
类型的分页实例T
是实体类current
表示当前第几页,从0开始size
表示每页的页数 - 调用Service的
page()
方法(肯定得是继承MyBatisPlus的IService类)
此时,iPage
里面已经把查询出来的数据封装进去了1
2
"/demo") (
3
public class DemoController {
4
5
6
private DemoService demoService;
7
8
"/listPage") (
9
10
public ServerResponse<PageVO<Demo>> listPage(Integer current, Integer size){
11
// 分页查询
12
IPage<T> iPage = new Page<>(current, size);
13
demoService.page(iPage);
14
// 封装VO
15
PageVO<T> pageVO = new PageVO<>();
16
pageVO.setCurrent(iPage.getCurrent());
17
pageVO.setSize(iPage.getSize());
18
pageVO.setTotal(iPage.getTotal());
19
pageVO.setList(iPage.getRecords());
20
21
return ServerResponseUtil.success(pageVO);
22
}
23
}
Postman返回结果
通过Postman请求接口,返回如下结果
可以看到接口返回的数据已经通过PageVO进行封装,包含了分页的查询数据了