欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mybatis-plus配置分頁(yè)插件返回統(tǒng)一結(jié)果集

 更新時(shí)間:2022年06月21日 09:34:26   作者:Java升級(jí)之路  
本文主要介紹了Mybatis-plus配置分頁(yè)插件返回統(tǒng)一結(jié)果集,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一、MyBatisPlusConfig中配置分頁(yè)插件

   /**
     * 配置分頁(yè)插件
     * @return page
     */
    @Bean
    public PaginationInterceptor paginationInterceptor(){
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // 開(kāi)啟 count 的 join 優(yōu)化,只針對(duì)部分 left join
        paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
        return paginationInterceptor;
    }

1. 分頁(yè)實(shí)現(xiàn)的原理

Mybatis-plus分頁(yè)插件使用的是IPage進(jìn)行分頁(yè)。IPage內(nèi)部原理是基于攔截器,攔截的是方法以及方法中的參數(shù)。判斷是否是查詢操作,如果是查詢操作,才會(huì)進(jìn)入分頁(yè)的處理邏輯。 進(jìn)入分頁(yè)邏輯處理后,攔截器會(huì)通過(guò)反射獲取該方法的參數(shù)進(jìn)行判斷是否存在IPage對(duì)象的實(shí)現(xiàn)類。如果不存在則不進(jìn)行分頁(yè),存在則將該參數(shù)賦值給IPage對(duì)象,然后進(jìn)行拼接sql的處理完成分頁(yè)操作。

二、統(tǒng)一結(jié)果集

1. 創(chuàng)建返回碼定義類

public class ResultCode {

    /**
     * 成功
     **/
    public final static int OK = 20000;
    /**
     * 失敗
     **/
    public final static int ERROR = 20001;
    /**
     * 用戶名或密碼錯(cuò)誤
     **/
    public final static int LOGIN_ERROR = 20002;
    /**
     * 權(quán)限不足
     **/
    public final static int ACCESS_ERROR = 20003;
    /**
     * 遠(yuǎn)程調(diào)用失敗
     **/
    public final static int REMOTE_ERROR = 20004;
    /**
     * 重復(fù)操作
     **/
    public final static int REPEAT_ERROR = 20005;
}

2. 創(chuàng)建結(jié)果集類

@Data
@ApiModel(value = "全局統(tǒng)一返回結(jié)果")
public class R implements Serializable {

    public final static String OK_MSG = "請(qǐng)求成功";
    public final static String FAIL_MSG = "請(qǐng)求失敗";

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

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

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

    @ApiModelProperty(value = "返回?cái)?shù)據(jù)")
    private Object data;

    @ApiModelProperty(value = "總條數(shù)")
    private Long total;

    @ApiModelProperty(value = "分頁(yè)信息")
    private PageInfo pageInfo;

    @Data
    public static class PageInfo {

        @ApiModelProperty("當(dāng)前頁(yè)")
        protected int currentPage;
        @ApiModelProperty("頁(yè)大小")
        protected int pageSize;
        @ApiModelProperty("總記錄數(shù)")
        protected long totalCount;
        @ApiModelProperty("總頁(yè)數(shù)")
        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;
    }

}
復(fù)制代碼

三、編寫分頁(yè)接口

1. 先編寫查詢類

代碼如下:

@Data
public class MemberQueryVo extends BasePageEntity{

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

2. service層

先定義一個(gè)查詢分頁(yè)的接口,在實(shí)現(xiàn)類里做相關(guān)處理

@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層

編寫分頁(yè)接口,代碼如下:

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

4. 接口測(cè)試

直接通過(guò)swagger生成的api接口頁(yè)面進(jìn)行測(cè)試,當(dāng)前頁(yè)、每頁(yè)參數(shù)傳1時(shí),返回的分頁(yè)信息里,總數(shù)是兩條,只返回了一條數(shù)據(jù)。說(shuō)明分頁(yè)成功。

再進(jìn)行條件查詢的時(shí)候,也成功查詢對(duì)應(yīng)數(shù)據(jù)。

再進(jìn)行條件查詢的時(shí)候,也成功查詢對(duì)應(yīng)數(shù)據(jù)。

總結(jié)

感謝大家的閱讀,上就是今天要講的內(nèi)容,本文簡(jiǎn)單介紹了如何配置分頁(yè)插件、以及分頁(yè)的原理。如有不足之處,純屬能力有限,還請(qǐng)多多包涵。

到此這篇關(guān)于Mybatis-plus配置分頁(yè)插件返回統(tǒng)一結(jié)果集的文章就介紹到這了,更多相關(guān)Mybatis-plus分頁(yè)返回統(tǒng)一結(jié)果集內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論