• 多个实体类的repository实现的方法都差不多,比如llcweb项目中document、image、file几个类的动态查询(findAll)、findBy一类的方法,汇总到一个泛型接口中定义

    /**
     * @Author Haien
     * @Description 资源类的泛型接口,可分别创建某种资源的repository来继承该接口
     * @Date 2018/9/14
     * @Param
     * @return
     **/
    @NoRepositoryBean //不要暴露出来,数据库中没有表和这个接口匹配
    public interface ResourceRepository<T,ID extends Serializable> extends JpaRepository<T,ID> { //id序列化,传入id的类型
        /**
         * 分页动态查询(只能叫findAll)
         **/
        Page<T> findAll(Specification<T> specification, Pageable pageable);
    
        Page<T> findByAuthorId(int id,Pageable pageable);
        Page<T> findByModel(String model,Pageable pageable);
    
    }
    
  • 实体类的repository继承此泛型接口,传入实体类,可以另外添加一些具体到某个数据库的新方法(即使不定义新方法也要继承)

    public interface ImageRepository extends ResourceRepository<Image,Integer> {
        /**
         * 模糊查询
         **/
        @Query("from Image i where i.description like %?1% or i.author like %?1% or i.model like %?1%")
        Page<Image> fuzzySearch(String key,Pageable pageable);
    }
    
  • 实例化

    @Autowired
    private ImageRepository imageRepository;