文章插圖

文章插圖
一、MyBatisPlusConfig中配置分頁插件
/*** 配置分頁插件* @return page*/@Beanpublic PaginationInterceptor paginationInterceptor(){PaginationInterceptor paginationInterceptor = new PaginationInterceptor();// 開啟 count 的 join 優化,只針對部分 left joinpaginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));return paginationInterceptor;}【mybaties分頁原理 mybatis如何實現分頁,有幾種方式】1. 分頁實現的原理Mybatis-plus分頁插件使用的是IPage進行分頁 。IPage內部原理是基于攔截器,攔截的是方法以及方法中的參數 。判斷是否是查詢操作,如果是查詢操作,才會進入分頁的處理邏輯 。進入分頁邏輯處理后,攔截器會通過反射獲取該方法的參數進行判斷是否存在IPage對象的實現類 。如果不存在則不進行分頁,存在則將該參數賦值給IPage對象,然后進行拼接sql的處理完成分頁操作 。
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. 創建結果集類@[email protected](value = "http://www.mnbkw.com/jxjc/168754/全局統一返回結果")public class R implements Serializable {public final static String OK_MSG = "請求成功";public final static String FAIL_MSG = "請求失敗";@ApiModelProperty(value = "http://www.mnbkw.com/jxjc/168754/是否成功")private boolean success;@ApiModelProperty(value = "http://www.mnbkw.com/jxjc/168754/返回碼")private Integer code;@ApiModelProperty(value = "http://www.mnbkw.com/jxjc/168754/返回消息")private String message;@ApiModelProperty(value = "http://www.mnbkw.com/jxjc/168754/返回數據")private Object data;@ApiModelProperty(value = "http://www.mnbkw.com/jxjc/168754/總條數")private Long total;@ApiModelProperty(value = "http://www.mnbkw.com/jxjc/168754/分頁信息")private PageInfo pageInfo;@Datapublic 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 = http://www.mnbkw.com/jxjc/168754/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. 先編寫查詢類代碼如下:
@Datapublic class MemberQueryVo extends BasePageEntity{@ApiModelProperty(value = "http://www.mnbkw.com/jxjc/168754/用戶名")private String userName;}2. service層先定義一個查詢分頁的接口,在實現類里做相關處理
@Servicepublic class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> implements MemberService {@Overridepublic 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 = "http://www.mnbkw.com/jxjc/168754/分頁用戶列表")@GetMapping(value = "http://www.mnbkw.com/getPage")public R listPage(MemberQueryVo queryVo){IPage<Member> page = memberService.listMemberPage(queryVo);return R.ok(page);}4. 接口測試直接通過swagger生成的api接口頁面進行測試,當前頁、每頁參數傳1時,返回的分頁信息里,總數是兩條,只返回了一條數據 。說明分頁成功 。
感謝大家的閱讀,上就是今天要講的內容,本文簡單介紹了如何配置分頁插件、以及分頁的原理 。如有不足之處,純屬能力有限,還請多多包涵 。
- 超聲波換能器的工作原理 什么是超聲波換能器
- 照相機成像 照相機成像的原理
- android注解的原理 android注解框架
- socket 傳輸文件 socket數據傳輸原理
- 前端代碼混淆壓縮 js代碼混淆原理
- 會跳舞的豆子實驗原理 會跳舞的豆子科學教案
- springmvc依賴注入原理 springmvc依賴注入注解
- mybatis 是否支持延遲加載?延遲加載的原理是什么 mybatis延遲加載的作用
- rsa加密解密算法原理 rsa的加密和解密原理
- 用冰箱來儲存食物的原理 冰箱為什么能保鮮食物
