原始碼地址:
github:https://github.com/verygoodwlk/ken-page-pom
gitee:https://gitee.com/wlkken/ken-page-pom
文章目錄
- 一、ken-page
- 二、SQL執行監控功能
- 三、分頁基本使用
- 四、復雜業務定制化分頁
- 五、多表關聯SQL分頁
- 六、Web層自動化兼容分頁
一、ken-page
1、一款基于Mybatis的分頁插件
2、可以兼容原生MyBatis、tk-Mybatis以及Mybatis-Plus等主流框架
3、解決復雜關聯查詢導致分頁錯誤的問題
4、配合Web層攔截,實作無侵入式分頁
二、SQL執行監控功能
插件自帶SQL執行記錄以及耗時監控功能,所有運行的sql陳述句以及相關引數還有耗時時間都將被日志記錄
[SQL] executor - [select * from test where id = ?]
[SQL] params[0] - [id:5]
[SQL] take up time - [0.013s]
關閉SQL執行監控,只需要在application.yml配置即可
#關閉SQL記錄,默認開啟
kenplugin:
execsql:
enable: false
三、分頁基本使用
添加依賴
<dependency>
<groupId>io.github.verygoodwlk</groupId>
<artifactId>ken-page-boot-starter</artifactId>
<version>1.1</version>
</dependency>
開啟分頁 - 在業務合適的地方,呼叫以下代碼開啟分頁
//pageNum - 當前頁碼
//pageSize - 每頁顯示多少條
//注意:這行代碼后,當前業務的所有資料庫查詢操作都將自動實作分頁效果
KenPages.setPage(new Page(pageNum, pageSize));
查詢后獲取分頁資訊(總條數、總頁碼等資料)
//分頁的相關資訊
Page page = KenPages.getPage();
int count = page.getCount(); //獲得總記錄數
int totle = page.getTotle(); //總頁數
注意:因為分頁插件的無侵入設計,可以隨時停止所有分頁的功能,只需在application.yml中配置即可
#關閉分頁功能 - 分頁的業務會自動變成查詢全部,默認開啟
kenplugin:
page:
enable: false
四、復雜業務定制化分頁
在一些復雜的業務中,可能存在多個子業務,有些子業務可能需要分頁,有些子業務不需要,則可以使用定制化分頁的功能
開啟分頁定制化
//引數二:表示開啟定制化分頁,默認關閉
KenPages.setPage(new Page(pageNum, pageSize), true);
標記分頁注解 - 通常在子業務方法或者mapper介面方法上標記
主業務方法(){
//開啟分頁
KenPages.setPage(new Page(pageNum, pageSize), true);
//子業務1方法
//子業務2方法
//子業務3方法
//子業務4方法
}
子業務1方法(){
}
@Paging
子業務2方法(){
}
子業務3方法(){
}
@Paging
子業務4方法(){
}
當前模式下,只有標注了@Paging注解的業務,才會受到分頁的影響
@Paging注解可以直接標記在Mapper介面的方法上
五、多表關聯SQL分頁
實際開發程序中,SQL可能會關聯多張表查詢,導致查出來的分頁結果會存在數量不足的問題,比如
select * from
table1 t join table2 t2 on t1.id = t2.tid
以上這條SQL,本意是講table1作為主表,關聯查詢出table2的結果,table2的結果作為子集放入到table1對應的記錄中,
此時,如果要分頁,應該是對table1表進行分頁,但是因為關聯的存在,實際table1查詢出來的記錄,并不會滿足當前頁的記錄數,
解決方案
我們需要調整下SQL的結構
select * from
(@{select * from table1 limit ?}) t join table2 t2 on t.id = t2.tid
table1作為主表,我們可以人為將主表的查詢部分獨立出來,然后在主表查詢前后加上@{},
插件會自動判別到該部分為主表查詢,會先對該部分分頁,再將分頁出來的結果去關聯其他表,
這樣就會得到正確的分頁結果,實際情況可能比這個復雜的多,所以需要開發者根據實際的業務去動態調整SQL陳述句的結構,
注意:@{}在Mybatis的映射檔案中可能會報錯,那是因為@{}被MyBatis的dtd約束檔案判定為不合法的字符,這里開發者無需在意,
該錯誤并不影響SQL的執行
六、Web層自動化兼容分頁
開啟Web層分頁兼容配置(默認關閉)
#開啟web層分頁兼容配置
kenplugin:
page:
webconfig:
enable: true
客戶端傳遞分頁引數
#pageNum - 當前頁
#pageSize - 每頁顯示多少條
http://server.com/xxxx?pageNum=1&pageSize=5
開啟web層兼容分頁后,只需要客戶端傳遞分頁引數,后續業務會自動化完成分頁,
無需再使用KenPages.setPage(new Page(pageNum, pageSize));方法來開啟分頁,業務復雜的情況下,仍然可以使用@Paging注解實作定制化分頁
定制分頁引數名稱
當不想使用pageNum和pageSize作為引數名稱時,可以定制名稱
kenplugin:
page:
key:
#定制當前頁的引數名稱
num: pageNo
#定制每頁條數的引數名稱
size: pageS
回傳分頁資訊給客戶端
Web層(Controller方法)回傳的物件必須繼承BaseResult類,比如
class OutPut<T> extends BaseResult{
Integer code;
String msg;
T datas;
}
@RequestMapping("/xxx/xxx")
public OutPut<List<A>> xxxx(){
}
客戶端會收到如下的結果資料:
{
//分頁資訊
"page": {
"pageNum": 1,
"pageSize": 2,
"count": 25,
"totle": 13
},
"code": 200,
"message": "請求成功",
"data": [
{
//資料部分....
}
]
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/291910.html
標籤:其他
上一篇:永磁同步電機的I/F啟動控制策略
