动态查询可参考:
https://blog.csdn.net/liuyunyihao/article/details/81194007
注意点:
CriterialBulider cb 构造条件,最后返回条件的and拼接,即这些条件都是and关系,predictcate是一个数组。
return cb.and(predicates.toArray(new Predicate[predicates.size()]));
如果是or的连接关系,单独再构造一个predictcate集合,这个集合里的条件是or的关系;
最后再将这个or集合和and集合,再次and起来即可。
条件参数的类型,要与实体entity完全一致。
public Predicate toPredicate(Root<BrandEntity> root, CriteriaQuery<?> query, CriteriaBuilder cb) { // TODO Auto-generated method stub ArrayList<Predicate> predicates = Lists.newArrayList(); if(StringUtils.isNotBlank(model.getKey())) { Predicate predicate = cb.like(root.get("name"), "%" + model.getKey() + "%"); predicates.add(predicate); } if(model.getKey().length()==1) { Predicate predicate = cb.equal(root.<Character>get("letter"), model.getKey().toUpperCase().charAt(0)); predicates.add(predicate); } return cb.or(predicates.toArray(new Predicate[predicates.size()]));//这里面两个predicate是or关系 }
Predicate predicate = cb.equal(root.<Character>get("letter"), model.getKey().toUpperCase().charAt(0));
类型要一致,表里面是char类型,不是varchar
Character是包装类型
分页和排序。
// Sort sort = new Sort(Sort.Direction.DESC,"createTime"); // Pageable pageable =new PageRequest(pageNum - 1, pageLimit, sort); 过时 Sort sort = Sort.by(model.getSortBy()).ascending(); 可以拼接多个排序对象 PageRequest pageAndSort = PageRequest.of( Integer.valueOf(model.getPage()), Integer.valueOf(model.getRows()), sort);
原文:https://www.cnblogs.com/wenhui2015/p/14527977.html