最近项目技术选型db框架选择了使用JPA,刚开始时,使用jpa进行一些单表简单的查询非常轻松,大家写的不亦乐乎,后来在遇到多条件动态查询的业务场景时,发现现有的JpaRepository提供的方法和自己写@Query已经满足了不了需求,难不成要对所有的条件和字段进行判断,再写很多个dao方法
?后面查到jpa提供了围绕Specification这个类的一系列类,来用于实现动态查询。
首先,毫无疑问需要定义一个dao接口,这个接口除了继承JpaRepository之外,还需要继承JpaSpecificationExecutor。
public interface FileInfoDao extends JpaRepository<FileInfo, Long>, JpaSpecificationExecutor<FileInfo>{
}
这是我用于查询文件信息的dao,我们可以看到JpaSpecificationExecutor有以下这些方法:
T findOne(Specification<T> spec);
List<T> findAll(Specification<T> spec);
Page<T> findAll(Specification<T> spec, Pageable pageable);
List