JPA动态查询

 

 

动态查询可参考:

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

 

posted @ 2021-03-13 11:10  加瓦加瓦  阅读(198)  评论(0编辑  收藏  举报