Spring Data JPA 復(fù)雜/多條件組合分頁查詢
更新時間:2017年04月07日 09:57:58 作者:王曉東1號
本文主要介紹了Spring Data JPA 復(fù)雜/多條件組合分頁查詢的相關(guān)資料。具有很好的參考價值。下面跟著小編一起來看下吧
話不多說,請看代碼:
public Map<String, Object> getWeeklyBySearch(final Map<String, String> serArgs,
String pageNum, String pageSize) throws Exception {
// TODO Auto-generated method stub
Map<String,Object> resultMap=new HashMap<String, Object>();
// 判斷分頁條件
pageNum = TextUtils.isNotBlank(pageNum) ? pageNum : "1";
pageSize = TextUtils.isNotBlank(pageSize) ? pageSize : "10";
// 分頁時的總頁數(shù)、每頁條數(shù)、排序方式、排序字段
Pageable StuPageable = PageUtils.buildPageRequest(Integer.valueOf(pageNum),Integer.valueOf(pageSize), new Sort(Direction.DESC, new String[] { "xmzbsj","lstProinfo.proId"}));
// 按照條件進行分頁查詢,根據(jù)StuPageable的分頁方式
Page<Weekly> StuPage = proWeeklyDao.findAll(new Specification<Weekly>() {
public Predicate toPredicate(Root<Weekly> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
List<Predicate> lstPredicates = new ArrayList<Predicate>();
if (TextUtils.isNotBlank(serArgs.get("xmmc"))) {
lstPredicates.add(cb.like(root.get("lstProinfo").get("xmmc").as(String.class), "%" + serArgs.get("xmmc") + "%"));
}
if (TextUtils.isNotBlank(serArgs.get("xmzbqssj"))) {
lstPredicates.add(cb.greaterThanOrEqualTo(root.get("xmzbsj").as(String.class),serArgs.get("xmzbqssj")));
}
if (TextUtils.isNotBlank(serArgs.get("xmzbjzsj"))) {
lstPredicates.add(cb.lessThanOrEqualTo(root.get("xmzbsj").as(String.class),serArgs.get("xmzbjzsj")));
}
Predicate[] arrayPredicates = new Predicate[lstPredicates.size()];
return cb.and(lstPredicates.toArray(arrayPredicates));
}
}, StuPageable);
// 按照條件進行分頁查詢
resultMap = PageUtils.getPageMap(StuPage);
return resultMap;
}
buildPageRequest()方法,導(dǎo)入的包,下面是自己寫的方法
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
* @param pageNum 當前頁
* @param pageSize 每頁條數(shù)
* @param sortType 排序字段
* @param direction 排序方向
*/
public static PageRequest buildPageRequest(int pageNum, int pageSize, String sortType, String direction) {
Sort sort = null;
if (!TextUtils.isNotBlank(sortType)) {
return new PageRequest(pageNum - 1, pageSize);
} else if (TextUtils.isNotBlank(direction)) {
if (Direction.ASC.equals(direction)) {
sort = new Sort(Direction.ASC, sortType);
} else {
sort = new Sort(Direction.DESC, sortType);
}
return new PageRequest(pageNum - 1, pageSize, sort);
} else {
sort = new Sort(Direction.ASC, sortType);
return new PageRequest(pageNum - 1, pageSize, sort);
}
}
public static PageRequest buildPageRequest(int pageNum, int pageSize, String sortType) {
return buildPageRequest(pageNum, pageSize, sortType, null);
}
getPageMap()方法:
JPA的Page也是集合,獲取Page集合里的值,最后獲取到的這些(key,value)
/**
* 封裝分頁數(shù)據(jù)到Map中。
*/
public static Map<String, Object> getPageMap(Page<?> objPage) {
Map<String, Object> resultMap = new HashMap<String, Object>();
resultMap.put(Constants.PAGE_RESULT_LIST, objPage.getContent()); // 數(shù)據(jù)集合,符合查詢條件的所有記錄數(shù)據(jù)
resultMap.put(Constants.PAGE_TOTAL_NUM, objPage.getTotalElements()); // 總記錄數(shù)
resultMap.put(Constants.PAGE_TOTAL_PAGE, objPage.getTotalPages()); // 總頁數(shù)
resultMap.put(Constants.PAGE_NUM, objPage.getNumber()); // 當前頁碼
resultMap.put(Constants.PAGE_SIZE, objPage.getSize()); // 每頁顯示數(shù)量
return resultMap;
}
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
相關(guān)文章
微服務(wù)Redis-Session共享登錄狀態(tài)的過程詳解
這篇文章主要介紹了微服務(wù)Redis-Session共享登錄狀態(tài),本文采取Spring security做登錄校驗,用redis做session共享,實現(xiàn)單服務(wù)登錄可靠性,微服務(wù)之間調(diào)用的可靠性與通用性,需要的朋友可以參考下2023-12-12
從java源碼分析線程池(池化技術(shù))的實現(xiàn)原理
這篇文章主要介紹了從java源碼分析線程池(池化技術(shù))的實現(xiàn)原理,池化技術(shù)是一種編程技巧,當程序出現(xiàn)高并發(fā)時,能夠明顯的優(yōu)化程序,降低系統(tǒng)頻繁創(chuàng)建銷毀連接等額外開銷,下文更多的相關(guān)介紹需要的小伙伴可以參考一下2022-04-04
java開發(fā)實現(xiàn)訂閱到貨通知幫我們買到想買的東西
這篇文章主要為大家介紹了java開發(fā)實現(xiàn)訂閱到貨通知幫我們買到想買的東西示例demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02
Java中用內(nèi)存映射處理大文件的實現(xiàn)代碼
下面小編就為大家?guī)硪黄狫ava中用內(nèi)存映射處理大文件的實現(xiàn)代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-06-06

