- 1 前言
- 2 项目元数据
- 3 使用条件
- 4 玩转Spring Data Repositories
- 4.1 核心概念
- 4.2 查询方法
- 4.3 repository接口定义
- 4.3.1 调整repository定义
- 4.4 定义查询方法
- 4.4.1 查询策略
- 4.4.2 创建查询
- 4.4.3 属性表达式
- 4.4.4 处理特殊参数
- 4.4.5 限定查询结果集大小
- 4.4.6 Stream处理查询结果
- 4.4.7 异步处理查询结果
- 4.5 创建repository实例
- 4.5.1 XML配置
- 4.5.2 JavaConfig
- 4.5.3 独立使用
- 4.6 自定义repository实现
- 4.6.1 为单一的repositories添加自定义方法
- 4.6.2 为所有的repositories添加自定义方法
- 4.7 扩展Spring Data
- 4.7.1 WEB支持
- 4.7.2 Repository填充
- 5 Elasticsearch Repositories
- 5.1.1 Spring命名空间
- 5.1.2 基于注解的配置
- 5.1.3 使用CDI
- 5.2.1 查询策略
- 5.2.2 创建查询
- 5.2.3 使用@Query注解
- 5.3 其他Elasticsearch操作的支持
- 5.3.1 构建Filter
- 5.3.2 利用Scan和Scroll处理大结果集
- 6.1 附录A 命名空间参考文档
- 6.2 附录B Populators命名空间参考文档
- 6.3 附录C Repository查询关键字
- 6.4 附录D Repository查询返回类型
4.6.2 为所有的repositories添加自定义方法
如果想要给为所有的repository接口增加一个方法,那么之前的方法是不可行的。为了给所有的repository添加自定义的方法,开发者首先需要定义一个中间过渡的接口。
Example 20. An interface declaring custom shared behavior(定义中间接口声明)
@NoRepositoryBean
public interface MyRepository<T, ID extends Serializable>
extends PagingAndSortingRepository<T, ID> {
void sharedCustomMethod(ID id);
}
现在,开发者的其他repository接口需要继承定义的中间接口而不是继承Repository接口。接下来需要为这个中间接口创建实现类。这个实现类是基于Repository中的基类的(不同的持久化存储继承的基类也不相同,这里以Jpa为例),这个类会被当做repository代理的自定义类来执行。 Example 21. Custom repository base class(自定义reposotory基类)
public class MyRepositoryImpl<T, ID extends Serializable>
extends SimpleJpaRepository<T, ID> implements MyRepository<T, ID> {
private final EntityManager entityManager;
public MyRepositoryImpl(JpaEntityInformation entityInformation,EntityManager entityManager) {
super(entityInformation, entityManager);
// Keep the EntityManager around to used from the newly introduced methods.
this.entityManager = entityManager;
}
public void sharedCustomMethod(ID id) {
// implementation goes here
}
}
Spring中命名空间默认会为base-package下所有的接口提供一个实例。但MyRepository只是作为一个中间接口,并不需要创建实例。所以我们可以使用@NoRepositoryBean注解或将其排除在base-package的配置中
最后一步是使用JavaConfig或Xml配置这个自定义的repository基类。
Example 22. Configuring a custom repository base class using JavaConfig(使用JavaConfig配置repository基类)
@Configuration
@EnableJpaRepositories(repositoryBaseClass = MyRepositoryImpl.class)
class ApplicationConfiguration { … }
也可使用Xml的方式配置。
Example 23. Configuring a custom repository base class using XML(使用xml配置自定义repository基类)
<repositories base-package="com.acme.repository"
repository-base-class="….MyRepositoryImpl" />
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
![扫码二维码加入Web技术交流群](/public/img/jiaqun_03.jpg)
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论