Jpa complex query field, paging, sorting

Jpa complex query field, paging, sorting

	page  = page * pageSize;
	startTime = startTime + " 00:00:00";
	endTime = endTime+ " 23:59:59";
	Date startDate = DateUtil.parse(startTime, "yyyy-MM-dd HH:mm:ss");
	Date endDate = DateUtil.parse(endTime, "yyyy-MM-dd HH:mm:ss");
	CriteriaBuilder cb = entityManager.getCriteriaBuilder();
	CriteriaQuery<Tuple> query = cb.createTupleQuery();
	Root<类> root = query.from(类.class);
	query.multiselect(root.get("字段"),cb.max(root.get("字段")),cb.count(root.get("字段")));
	
	List<Predicate> predicates = new ArrayList<>();
	predicates.add(cb.equal(root.get("字段"), 参数));
	predicates.add(cb.equal(root.get("字段"), 参数));
	if (NonUtil.isNotNon(参数)){
	    predicates.add(cb.equal(root.get("字段"), 参数));
	}
	if(NonUtil.isNotNon(tagName)){
	    predicates.add(root.get("字段").in(参数));
	}
	//如果有时间条件
	if (NonUtil.isNotNon(startTime) && NonUtil.isNotNon(endTime)) {
	    try {
	        //Date startDate = DateUtil.parse(startTime+" 00:00:00","yyyy-MM-dd HH:mm:ss");
	        //Date endDate = DateUtil.parse(endTime+" 23:59:59","yyyy-MM-dd HH:mm:ss");
	        predicates.add(cb.between(root.get("字段"), startDate, endDate));
	    } catch (Exception e) {
	        e.printStackTrace();
	    }
	}
	predicates.add(cb.or(cb.lessThan(root.get("字段"),root.get("字段")),cb.isNull(root.get("字段"))));
	query.groupBy(root.get("字段"));
	query.orderBy(cb.desc(cb.max(root.get("字段"))));
	query.where(cb.and(predicates.toArray(new Predicate[0])));
	List<Tuple> tuples = entityManager.createQuery(query).getResultList();
	if (page+pageSize > tuples.size()) {
	    tuples = tuples.subList(page,tuples.size() );
	}else {
	    tuples = tuples.subList(page, page + pageSize);
	}

Guess you like

Origin blog.csdn.net/LWHuai/article/details/87877483