一、微调存储库接口
1、有选择地暴露CRUD方法,同时允许您在提供的Spring Data Repositories功能之上定义自己的抽象。
@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);
}
@NoRepositoryBean确保将该注释添加到Spring Data不应在运行时创建实例的所有存储库接口。
二、使用具有多个Spring Data模块的存储库
2.1 存储库定义扩展了特定于模块的存储库
interface MyRepository extends JpaRepository<User, Long> { }
@NoRepositoryBean
interface MyBaseRepository<T, ID extends Serializable> extends JpaRepository<T, ID> {
…
}
interface UserRepository extends MyBaseRepository<User, Long> {
…
}
2.2 使用特定于模块的类型注释进行注释
interface PersonRepository extends Repository<Person, Long> {
…
}
@Entity
public class Person {
…
}
interface UserRepository extends Repository<User, Long> {
…
}
@Document
public class User {
…
}
@Entry用于映射Spring Data JPA,@Document用于映射Spring Data MongoDB 。
2.3 使用具有混合注释的域类的存储库定义
interface JpaPersonRepository extends Repository<Person, Long> {
…
}
interface MongoDBPersonRepository extends Repository<Person, Long> {
…
}
@Entity
@Document
public class Person {
…
}
定义了两个存储库,JPA和MongoDB 。
2.4 存储库的最后一种方法是确定存储库基础包。基础包定义了扫描存储库接口定义的起点,这意味着将存储库定义放在适当的包中。默认情况下,注释驱动的配置使用配置类的包。
@EnableJpaRepositories(basePackages = "com.acme.repositories.jpa")
@EnableMongoRepositories(basePackages = "com.acme.repositories.mongo")
interface Configuration { }