多个实体类的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;