Repository接口

 Repository 接口是 Spring Data 的一个核心接口,它不提供任何方法,开发者需要在自己定义的接口中声明需要的方法 

    public interface Repository<T, ID extends Serializable> { } 
Spring Data可以让我们只定义接口,只要遵循 Spring Data的规范,就无需写实现类。  
与继承 Repository 等价的一种方式,就是在持久层接口上使用 @RepositoryDefinition 注解,并为其指定 domainClass 和 idClass 属性。如下两种方式是完全等价的

Respository子接口
基础的 Repository 提供了最基本的数据访问功能,其几个子接口则扩展了一些功能。它们的继承关系如下: 
1.Repository: 仅仅是一个标识,表明任何继承它的均为仓库接口类
2.CrudRepository: 继承 Repository,实现了一组 CRUD 相关的方法 
3.PagingAndSortingRepository: 继承 CrudRepository,实现了一组分页排序相关的方法 
4.JpaRepository: 继承 PagingAndSortingRepository,实现一组 JPA 规范相关的方法 
自定义的 XxxxRepository 需要继承 JpaRepository,这样的 XxxxRepository 接口就具备了通用的数据访问控制层的能力。
JpaSpecificationExecutor: 不属于Repository体系,实现一组 JPA Criteria 查询相关的方法 


/**Repository---仓库
 * 
 * 1.Repository是一个空接口,即是一个标记接口
 * 2.若我们定义的接口继承了Repository,则该接口会被IOC容器识别为一个Repository Bean
 * 纳入到IOC容器中,进而可以在该接口中定义满足一定规范的方法
 * 
 * 3.实际上,也可以通过@RepositoryDefinition注解来代替Repository接口
 * */
 
/**
 * .在Repository子接口中声明方法
 * 1.不是随便声明的,而需要符合一定的规范
 * 2.查询方法以find|read|get开头
 * 3.涉及条件查询时,条件的属性用条件关键字连接,
 * 4.要注意的是:条件属性以首字母大写
 * 5.支持属性的级联查询,若当前类有符合条件的属性,则优先使用,而不使用级联属性
 *   若需要使用级联属性,则属性之间使用_进行连接
 * */
/*@RepositoryDefinition( domainClass = Person.class,idClass=Integer.class)*/
public interface PersonRepository extends Repository<Person,Integer>{
 
//根据lastName来获取对应的Person
Person getByLastName(String lastName);

 
posted @ 2018-03-06 21:18  1斑点  阅读(905)  评论(0编辑  收藏  举报