Spring Data JPA 復雜/多條件組合分頁查詢


推薦視頻:

http://www.icoolxue.com/album/show/358

 

 

    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";
        // 分頁時的總頁數、每頁條數、排序方式、排序字段
        Pageable StuPageable = PageUtils.buildPageRequest(Integer.valueOf(pageNum),Integer.valueOf(pageSize), new Sort(Direction.DESC, new String[] { "xmzbsj","lstProinfo.proId"}));
        // 按照條件進行分頁查詢,根據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()方法,導入的包,下面是自己寫的方法

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 每頁條數
     * @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)

    /**
     * 封裝分頁數據到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()); // 數據集合,符合查詢條件的所有記錄數據
        resultMap.put(Constants.PAGE_TOTAL_NUM, objPage.getTotalElements()); // 總記錄數
        resultMap.put(Constants.PAGE_TOTAL_PAGE, objPage.getTotalPages()); // 總頁數
        resultMap.put(Constants.PAGE_NUM, objPage.getNumber()); // 當前頁碼
        resultMap.put(Constants.PAGE_SIZE, objPage.getSize()); // 每頁顯示數量

        return resultMap;
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM