最近在项目中使用到了spring data,Spring Data是一个用于简化数据库访问,并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷,并支持map-reduce框架和云计算数据服务。
Spring提供了repository共我们使用,repository提供了几个诸如:findsave delete等方法来供我们在简单的操作数据库,但是当我们的程序中涉及到很多不确定项目的动态查询的时候,就需要我们动态的组建查询条件,可以使用jpa的Specification来实现,在Specification接口只定义了一个方法:
Predicate toPredicate(Rootroot, CriteriaQuery query, CriteriaBuilder cb);
1:过滤条件会被应用到SQL语句的FROM子句中。在criteria 查询中,查询条件通过Predicate或Expression实例应用到CriteriaQuery对象上。
2:这些条件使用 CriteriaQuery.where 方法应用到CriteriaQuery 对象上
3:CriteriaBuilder也作为Predicate实例的工厂,通过调用CriteriaBuilder 的条件方法( equal,notEqual, gt, ge,lt, le,between,like等)创建Predicate对象。
4:复合的Predicate 语句可以使用CriteriaBuilder的and, or andnot 方法构建。
我们可以重写这个方法来实现:
在reposity中定义find方法,传入参数类型为Specification
Page findAll(Specification specification,Pageable pageable);
我们定义一个类Criteria