使用SpringDataJPA如何实现多条件的分页查询
使用Spring Data JPA如何实现多条件的分页查询?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
河口ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18982081108(备注:SSL证书合作)期待与您的合作!
话不多说,请看代码:
public MapgetWeeklyBySearch(final Map serArgs, String pageNum, String pageSize) throws Exception { // TODO Auto-generated method stub Map resultMap=new HashMap (); // 判断分页条件 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 StuPage = proWeeklyDao.findAll(new Specification () { public Predicate toPredicate(Root root, CriteriaQuery<?> query, CriteriaBuilder cb) { List lstPredicates = new ArrayList (); 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 MapgetPageMap(Page<?> objPage) { Map resultMap = new HashMap (); 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; }
看完上述内容,你们掌握使用Spring Data JPA如何实现多条件的分页查询的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!
文章标题:使用SpringDataJPA如何实现多条件的分页查询
分享链接:http://scyingshan.cn/article/ghijje.html