MyBatisPlus分页查询

MyBatisPlus插件整合分页查询功能

使用的环境如下

环境 版本
系统 macOS 10.15.4
JDK 8
Maven 3
MyBatisPlus 3.4.3

关于搭建MyBatisPlus的内容可以参考这篇文章:Springboot整合MyBatisPlus
废话不多说,直接上代码

配置类

新版本的MP,在config包下面建一个配置类,内容如下

1
@Configuration
2
public class MybatisPlusConfig {
3
    
4
    /**
5
     * 分页插件
6
     * @return
7
     */
8
    @Bean
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
@Data
2
@TableName(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
@Data
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内,为了演示方便,故提出来)

  1. 定义一个IPage<T>类型的分页实例
    T是实体类
    current表示当前第几页,从0开始
    size表示每页的页数
  2. 调用Service的page()方法(肯定得是继承MyBatisPlus的IService类)
    此时,iPage里面已经把查询出来的数据封装进去了
    1
    @RestController
    2
    @RequestMapping("/demo")
    3
    public class DemoController {
    4
        
    5
        @Autowired
    6
        private DemoService demoService;
    7
        
    8
        @GetMapping("/listPage")
    9
        @Override
    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请求接口,返回如下结果
Postman返回结果
可以看到接口返回的数据已经通过PageVO进行封装,包含了分页的查询数据了

坚持原创技术分享,您的支持将鼓励我继续创作!