Spring Data JPA 復(fù)雜/多條件組合分頁(yè)查詢
話不多說(shuō),請(qǐng)看代碼:
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>(); // 判斷分頁(yè)條件 pageNum = TextUtils.isNotBlank(pageNum) ? pageNum : "1"; pageSize = TextUtils.isNotBlank(pageSize) ? pageSize : "10"; // 分頁(yè)時(shí)的總頁(yè)數(shù)、每頁(yè)條數(shù)、排序方式、排序字段 Pageable StuPageable = PageUtils.buildPageRequest(Integer.valueOf(pageNum),Integer.valueOf(pageSize), new Sort(Direction.DESC, new String[] { "xmzbsj","lstProinfo.proId"})); // 按照條件進(jìn)行分頁(yè)查詢,根據(jù)StuPageable的分頁(yè)方式 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); // 按照條件進(jìn)行分頁(yè)查詢 resultMap = PageUtils.getPageMap(StuPage); return resultMap; }
buildPageRequest()方法,導(dǎo)入的包,下面是自己寫(xiě)的方法
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 當(dāng)前頁(yè) * @param pageSize 每頁(yè)條數(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)
/** * 封裝分頁(yè)數(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()); // 總頁(yè)數(shù) resultMap.put(Constants.PAGE_NUM, objPage.getNumber()); // 當(dāng)前頁(yè)碼 resultMap.put(Constants.PAGE_SIZE, objPage.getSize()); // 每頁(yè)顯示數(shù)量 return resultMap; }
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持腳本之家!
相關(guān)文章
Java 9中如何對(duì)IntegerCache進(jìn)行修改詳解
這篇文章主要給大家介紹了關(guān)于Java 9中如何對(duì)IntegerCache進(jìn)行修改的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或使用java9具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起看看吧。2017-12-12微服務(wù)Redis-Session共享登錄狀態(tài)的過(guò)程詳解
這篇文章主要介紹了微服務(wù)Redis-Session共享登錄狀態(tài),本文采取Spring security做登錄校驗(yàn),用redis做session共享,實(shí)現(xiàn)單服務(wù)登錄可靠性,微服務(wù)之間調(diào)用的可靠性與通用性,需要的朋友可以參考下2023-12-12從java源碼分析線程池(池化技術(shù))的實(shí)現(xiàn)原理
這篇文章主要介紹了從java源碼分析線程池(池化技術(shù))的實(shí)現(xiàn)原理,池化技術(shù)是一種編程技巧,當(dāng)程序出現(xiàn)高并發(fā)時(shí),能夠明顯的優(yōu)化程序,降低系統(tǒng)頻繁創(chuàng)建銷(xiāo)毀連接等額外開(kāi)銷(xiāo),下文更多的相關(guān)介紹需要的小伙伴可以參考一下2022-04-04java開(kāi)發(fā)實(shí)現(xiàn)訂閱到貨通知幫我們買(mǎi)到想買(mǎi)的東西
這篇文章主要為大家介紹了java開(kāi)發(fā)實(shí)現(xiàn)訂閱到貨通知幫我們買(mǎi)到想買(mǎi)的東西示例demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02Java中用內(nèi)存映射處理大文件的實(shí)現(xiàn)代碼
下面小編就為大家?guī)?lái)一篇Java中用內(nèi)存映射處理大文件的實(shí)現(xiàn)代碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06