Mybatis-plus配置分页插件返回统一结果集

作者:Java升级之路 时间:2022-05-27 19:15:06 

一、MyBatisPlusConfig中配置分页插件

/**
    * 配置分页插件
    * @return page
    */
   @Bean
   public PaginationInterceptor paginationInterceptor(){
       PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
       // 开启 count 的 join 优化,只针对部分 left join
       paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
       return paginationInterceptor;
   }

1. 分页实现的原理

Mybatis-plus分页插件使用的是IPage进行分页。IPage内部原理是基于 * ,拦截的是方法以及方法中的参数。判断是否是查询操作,如果是查询操作,才会进入分页的处理逻辑。 进入分页逻辑处理后, * 会通过反射获取该方法的参数进行判断是否存在IPage对象的实现类。如果不存在则不进行分页,存在则将该参数赋值给IPage对象,然后进行拼接sql的处理完成分页操作。

Mybatis-plus配置分页插件返回统一结果集

二、统一结果集

1. 创建返回码定义类

public class ResultCode {

/**
    * 成功
    **/
   public final static int OK = 20000;
   /**
    * 失败
    **/
   public final static int ERROR = 20001;
   /**
    * 用户名或密码错误
    **/
   public final static int LOGIN_ERROR = 20002;
   /**
    * 权限不足
    **/
   public final static int ACCESS_ERROR = 20003;
   /**
    * 远程调用失败
    **/
   public final static int REMOTE_ERROR = 20004;
   /**
    * 重复操作
    **/
   public final static int REPEAT_ERROR = 20005;
}

2. 创建结果集类

@Data
@ApiModel(value = "全局统一返回结果")
public class R implements Serializable {

public final static String OK_MSG = "请求成功";
   public final static String FAIL_MSG = "请求失败";

@ApiModelProperty(value = "是否成功")
   private boolean success;

@ApiModelProperty(value = "返回码")
   private Integer code;

@ApiModelProperty(value = "返回消息")
   private String message;

@ApiModelProperty(value = "返回数据")
   private Object data;

@ApiModelProperty(value = "总条数")
   private Long total;

@ApiModelProperty(value = "分页信息")
   private PageInfo pageInfo;

@Data
   public static class PageInfo {

@ApiModelProperty("当前页")
       protected int currentPage;
       @ApiModelProperty("页大小")
       protected int pageSize;
       @ApiModelProperty("总记录数")
       protected long totalCount;
       @ApiModelProperty("总页数")
       protected long totalPage;

public PageInfo() {
       }

@ConstructorProperties({"currentPage", "pageSize", "totalCount", "totalPage"})
       public PageInfo(int currentPage, int pageSize, long totalCount, long totalPage) {
           this.currentPage = currentPage;
           this.pageSize = pageSize;
           this.totalCount = totalCount;
           this.totalPage = totalPage;
       }
   }

private R(){}

private R(int code, String msg, Object data) {
       this.code = code;
       this.message = msg;
       if (data instanceof Page<?>) {
           Page<?> page = (Page<?>) data;
           this.total = page.getTotal();
           this.data = page.getRecords();
           this.pageInfo = new PageInfo((int)page.getCurrent(), (int)page.getSize(), page.getTotal(), page.getPages());
       } else {
           this.data = data;
       }
   }

public static R ok(){
       R r = new R();
       r.setSuccess(true);
       r.setCode(ResultCode.OK);
       r.setMessage("成功");
       return r;
   }
   public static R ok(Object data) {
       return new R(ResultCode.OK, OK_MSG, data);
   }

public static R ok(String msg, Object data) {
       return new R(ResultCode.OK, msg, data);
   }

public static R error(){
       R r = new R();
       r.setSuccess(false);
       r.setCode(ResultCode.ERROR);
       r.setMessage("失败");
       return r;
   }

public static R error(String msg) {
       return new R(ResultCode.ERROR, msg, null);
   }

public static R error(int errorCode, String msg) {
       return new R(errorCode, msg, null);
   }

public R message(String message){
       this.setMessage(message);
       return this;
   }

public R code(Integer code){
       this.setCode(code);
       return this;
   }

public R data(Object data){
       this.setData(data);
       return this;
   }

}
复制代码

三、编写分页接口

1. 先编写查询类

代码如下:

@Data
public class MemberQueryVo extends BasePageEntity{

@ApiModelProperty(value = "用户名")
   private String userName;
}

2. service层

先定义一个查询分页的接口,在实现类里做相关处理

@Service
public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> implements MemberService {

@Override
   public IPage<Member> listMemberPage(MemberQueryVo queryVo) {
       IPage<Member> page = new Page<>(queryVo.getCurrentPage(),queryVo.getCurrentPage());
       //条件查询
       LambdaQueryWrapper<Member> queryWrapper = new LambdaQueryWrapper<Member>();

if (StringUtils.isNotBlank(queryVo.getUserName())) {
           queryWrapper.like(Member::getUserName, queryVo.getUserName());
       }

return baseMapper.selectPage(page,queryWrapper);
   }
}

3. controller层

编写分页接口,代码如下:

@ApiOperation(value = "分页用户列表")
   @GetMapping(value = "/getPage")
   public R listPage(MemberQueryVo queryVo){
       IPage<Member> page = memberService.listMemberPage(queryVo);
       return R.ok(page);
   }

4. 接口测试

直接通过swagger生成的api接口页面进行测试,当前页、每页参数传1时,返回的分页信息里,总数是两条,只返回了一条数据。说明分页成功。

再进行条件查询的时候,也成功查询对应数据。

Mybatis-plus配置分页插件返回统一结果集

再进行条件查询的时候,也成功查询对应数据。

Mybatis-plus配置分页插件返回统一结果集

来源:https://juejin.cn/post/7005191804710551565

标签:Mybatis-plus,分页,返回统一结果集
0
投稿

猜你喜欢

  • 解决IntelliJ IDEA中鼠标拖动选择为矩形区域问题

    2022-04-03 21:08:51
  • 详解Android数据存储—使用SQLite数据库

    2023-07-31 03:14:08
  • SpringBoot、mybatis返回树结构的数据实现

    2022-05-12 18:56:08
  • maven无法依赖spring-cloud-stater-zipkin的解决方案

    2023-09-12 01:54:51
  • c# Thread类线程常用操作详解

    2021-09-20 21:35:51
  • java去除字符串中的空格、回车、换行符、制表符的小例子

    2022-04-13 12:33:44
  • c# Selenium爬取数据时防止webdriver封爬虫的方法

    2023-06-24 07:50:51
  • Java从同步容器到并发容器的操作过程

    2021-10-14 05:26:58
  • 利用java操作Excel文件的方法

    2021-12-13 03:03:49
  • Java动态代理详解及实例

    2023-12-08 15:51:03
  • C#实现文本文件读写方法汇总

    2023-10-27 16:57:40
  • 剑指Offer之Java算法习题精讲链表专项训练

    2023-11-29 16:31:48
  • spring mvc中的@PathVariable获得请求url中的动态参数

    2023-08-22 22:08:40
  • Springboot整合Shiro的代码实例

    2021-09-03 04:16:52
  • SpringMvc返回modelandview返回的页面无法跳转问题及解决

    2023-02-07 23:49:51
  • java如何从不规则的字符串中截取出日期

    2022-05-28 02:33:58
  • java实现简单猜拳小游戏

    2021-09-01 07:49:46
  • Spring JPA 增加字段执行异常问题及解决

    2023-06-25 23:55:58
  • Androd 勇闯高阶性能优化之布局优化篇

    2023-01-22 12:12:15
  • Java将字符串转化为数组的两种方法

    2021-07-07 20:33:49
  • asp之家 软件编程 m.aspxhome.com