Mybatis-plus配置分頁(yè)插件返回統(tǒng)一結(jié)果集
一、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)文章
Spring5學(xué)習(xí)之基礎(chǔ)知識(shí)總結(jié)
這篇文章主要介紹了Spring5學(xué)習(xí)之基礎(chǔ)知識(shí)總結(jié),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-05-05JAVA 實(shí)現(xiàn)延遲隊(duì)列的方法
這篇文章主要介紹了JAVA 實(shí)現(xiàn)延遲隊(duì)列的方法,文中講解非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下2020-06-06Spring實(shí)戰(zhàn)之Qualifier注解用法示例
這篇文章主要介紹了Spring實(shí)戰(zhàn)之Qualifier注解用法,結(jié)合實(shí)例形式詳細(xì)分析了spring Qualifier注解相關(guān)配置、定義與使用方法,需要的朋友可以參考下2019-12-12SpringBoot中Bean生命周期自定義初始化和銷毀方法詳解
這篇文章給大家詳細(xì)介紹了SpringBoot中Bean生命周期自定義初始化和銷毀方法,文中通過(guò)代碼示例講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-01-01springboot中Getmapping獲取參數(shù)的實(shí)現(xiàn)方式
這篇文章主要介紹了springboot中Getmapping獲取參數(shù)的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05SpringBoot開(kāi)發(fā)技巧之如何處理跨域請(qǐng)求CORS
CORS(Cross-Origin Resource Sharing)"跨域資源共享",是一個(gè)W3C標(biāo)準(zhǔn),它允許瀏覽器向跨域服務(wù)器發(fā)送Ajax請(qǐng)求,打破了Ajax只能訪問(wèn)本站內(nèi)的資源限制2021-10-10通過(guò)自定制LogManager實(shí)現(xiàn)程序完全自定義的logger
本章主要闡述怎么完全定制化LogManager來(lái)實(shí)現(xiàn)應(yīng)用程序完全自定制的logger,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03JdbcTemplate操作數(shù)據(jù)庫(kù)的具體方法
這篇文章主要介紹了JdbcTemplate操作數(shù)據(jù)庫(kù)的具體操作方法,準(zhǔn)備工作需要大家先導(dǎo)入相關(guān)的jar包,建個(gè)數(shù)據(jù)庫(kù),具體操作方法跟隨小編一起看看吧2022-03-03