babyachievement / notes

读书笔记
1 stars 1 forks source link

Spring Data JPA (二)定义仓库接口 #15

Open babyachievement opened 7 years ago

babyachievement commented 7 years ago

参考Spring Data JPA (一),使用Spring Data JPA的第一步是定义仓库接口。该接口必须继承Repository并将域类和ID类型作为参数类型。如果需要为域类型暴露CRUD方法,继承CrudRepository而不是Repository接口。

1. 微调仓库定义( Fine-tuning repository definition)

通常仓库接口继承Repository,CrudRepository或PagingAndSortingRepository接口。或者,如果不想阔啊站Spring Data接口,可以使用@RepositoryDefinition对仓库接口进行注解。继承CrudRepository能够暴露出操作实体类的完整方法集。如果更倾向于暴露出的方法有选择性,只需要将我们想CrudRepository暴露的方法复制到域仓库中。

这让我们可以在Spring Data Repositoryies功能上层定义自己的抽象。

选择性地暴露CRUD方法:

@NoRepositoryBean
interface MyBaseRepository<T, ID extends Serializable> extends Repository<T, ID> {

  T findOne(ID id);

  T save(T entity);
}

interface UserRepository extends MyBaseRepository<User, Long> {
  User findByEmailAddress(EmailAddress emailAddress);
}

在第一步中为域仓库定义了公用的接口,并暴露了findOne(...)save(...)。这些方法将方法将被路要到我们选择的Spring Data提供的存储的基本repository实现中,比如选择JPA SimpleJpaRepository,因为它们于CrudRepository中的方法签名相同。所以UserRepository将可以用来保存用户,根据id查找单个用户以及根据他们的email地址触发一个查询来查找用户。

主机中间仓库接口使用了@NoRepositoryBean注解。确保将这个注解用到所有Spring Data不应在运行时创建实例的仓库接口上。