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 | (value = "t_demo") |
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里面已经把查询出来的数据封装进去了12("/demo")3public class DemoController {456private DemoService demoService;78("/listPage")910public ServerResponse<PageVO<Demo>> listPage(Integer current, Integer size){11// 分页查询12IPage<T> iPage = new Page<>(current, size);13demoService.page(iPage);14// 封装VO15PageVO<T> pageVO = new PageVO<>();16pageVO.setCurrent(iPage.getCurrent());17pageVO.setSize(iPage.getSize());18pageVO.setTotal(iPage.getTotal());19pageVO.setList(iPage.getRecords());2021return ServerResponseUtil.success(pageVO);22}23}
Postman返回结果
通过Postman请求接口,返回如下结果
可以看到接口返回的数据已经通过PageVO进行封装,包含了分页的查询数据了
