Spring Data JPA 复杂/多条件组合分页查询
更新时间:2017年04月07日 09:57:58 作者:王晓东1号
本文主要介绍了Spring Data JPA 复杂/多条件组合分页查询的相关资料。具有很好的参考价值。下面跟着小编一起来看下吧
话不多说,请看代码:
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; }
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!
相关文章
基于Spring Security的Oauth2授权实现方法
这篇文章主要介绍了基于Spring Security的Oauth2授权实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2019-09-09Spring-IOC容器-Bean管理-基于XML方式超详解
这篇文章主要介绍了Spring为IOC容器Bean的管理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2021-08-08Java ArrayList与Vector和LinkedList的使用及源码分析
ArrayList、Vector、LinkedList类均在java.util包中,均为可伸缩数组,即可以动态改变长度的数组。ArrayList 和 Vector都是基于存储元素的Object[] array来实现的,它们会在内存中开辟一块连续的内存来存储2022-11-11
最新评论