java中各種常用分頁插件:
-
MyBatis分頁插件:MyBatis提供了一種分頁插件,可以通過配置實作分頁查詢,使用MyBatis分頁插件需要在組態檔中添加插件配置,
-
PageHelper:PageHelper是一個開源的MyBatis分頁插件,可以通過簡單的配置實作分頁查詢,它支持MySQL、Oracle、PostgreSQL、SQL Server等資料庫,
-
JPA分頁插件:JPA提供了一種分頁插件,可以通過配置實作分頁查詢,使用JPA分頁插件需要在組態檔中添加插件配置,
這些分頁的核心原理都是大相徑庭,
舉例sql為:select name from students,如果是mysql分頁就是select name from students limit 0,10 java中的分頁插件操作技巧是 select * from (java類中創建的SQL陳述句) limit x,y;其中的x和y就是前端傳給后端的pageNum和pageSize,只是插件jar包把其中的復雜性都封裝了,但是原理都是這樣的,這樣的分頁是針對簡單的sql且都寫在一個sql中,這樣進行分頁,但是在常用的代碼中有一個小坑,如下這樣的分頁是不生效的:
Controller層:

impl層:


上面的每個userMapper都對應一個xml中的sql,這樣是不行的,因為這樣操作就成了 select * from (select * from user a select * from user b) limit 0,10
這樣有了兩個并行的sql,是無法limit,所以會失敗,
如果要生效,如果上面getUserRoleListByDeptId的方法是下面這樣的

那就可以分頁成功,
或者進行手動分頁,對所有的都生效:

Integer pageNum = page;
Integer pageSize = page_size; // 每頁顯示的條數
List<UserRoleListVO> userList = userService.findUserNamesByResourceId(companyOrProjectId, isCompany,nameOrphone,roleId);
int totalSize = userList.size(); // 總條數
int totalPage = (totalSize + pageSize - 1) / pageSize; // 總頁數
int startIndex = (pageNum - 1) * pageSize; // 起始索引位置
List<UserRoleListVO> pageList = new ArrayList<>();
if (startIndex < totalSize) {
int endIndex = Math.min(startIndex + pageSize, totalSize);
pageList = userList.subList(startIndex, endIndex);
}
return R.ok(pageList, totalSize);
代碼帖出來了,粘貼可用,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/548564.html
標籤:Java
上一篇:Java運算子
下一篇:Java入門4
