Spring Data JPA 复杂/多条件组合分页查询

2025-05-29 0 71

话不多说,请看代码:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30
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()方法,导入的包,下面是自己写的方法

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30
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)

?

1

2

3

4

5

6

7

8

9

10

11

12
/**

* 封装分页数据到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;

}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持快网idc!

原文链接:http://www.cnblogs.com/Donnnnnn/p/5857229.html

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Spring Data JPA 复杂/多条件组合分页查询 https://www.kuaiidc.com/117286.html

相关文章

发表评论
暂无评论