jpa2.0支持了Criteria查询,对应的接口是JpaSpecificationExecutor,我们可以利用Criteria实现动态查询
我们查看JpaSpecificationExecutor接口,发现这个接口里面的方法都需要Specification,JpaSpecificationExecutor接口方法代码如下:
T findOne(Specification<T> spec);
List<T> findAll(Specification<T> spec);
Page<T> findAll(Specification<T> spec, Pageable pageable);
List<T> findAll(Specification<T> spec, Sort sort);
long count(Specification<T> spec);
然后Specification却只有一个方法:
Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb);
参数解释:
CriteriaQuery接口:代表一个specific的顶层查询对象,它包含着查询的各个部分,比如:select 、from、where、group by、order by等
Root接口:代表Criteria查询的根对象,Criteria查询的查询根定义了实体类型,能为将来导航获得想要的结果,它与SQL查询中的FROM子句类似
CriteriaBuilder是Predicate实例的工厂,通过调用Criteria