4 spring repository-pattern neo4j spring-data-neo4j
我发现有一个名为GraphRepository的接口.我有一个存储库,供用户实现自己的接口来完成它的工作,但我想知道,我不应该实现GraphRepository吗?即使它实现的时间很长而某些方法也没用,我认为它是一个标准,我已经重新编写了很多在这个接口中定义的方法.
那么我应该写"YAGNI"代码还是不尊重标准?你有什么建议?
inc*_*.de 11
您不需要实际实现GraphRepository,而是扩展它.原则Spring-Data是所有的锅炉板CRUD代码都要处理(通过在启动时代理),所以你要做的就是为你的特定实体创建一个扩展GraphRepository的接口,然后只添加你需要的特定方法.
例如; 如果我有一个实体CustomerNode,要创建标准的CRUD方法,我可以创建一个新的接口CustomerNodeRepository extends GraphRepository<CustomerNode,Long>.GraphRepository现在可以从CustomerNodeRepositorySpring-Data-Neo4J 访问和实现所有方法(例如save,findAll,findOne,delete,deleteAll等),而无需编写单行实现代码.
现在,模式允许您处理特定的存储库代码(例如findByNameAndDateOfBirth)而不是简单的CRUD内容.
Spring-Data包对于存储库交互非常有用.它可以减少大量的代码(已经看到代码行减少了80%),并强烈建议使用它
编辑:实现自定义执行
如果要将自己的自定义行为添加到Repository方法,则可以创建合并接口和自定义实现的概念.例如,假设我想创建一个调用的方法findCustomerNodeBySomeStrangeCriteria并执行此操作,我实际上想要链接到关系数据库来执行该功能.
首先,我们定义一个单独的独立接口,仅包含我们的"额外"方法.
public interface CustomCustomerNodeRepository {
List<CustomerNode> findCustomerNodeBySomeStrangeCriteria(Object strangeCriteria);
}
Run Code Online (Sandbox Code Playgroud)
接下来我们更新我们的普通接口,不仅扩展GraphRepository,还扩展我们的新定制接口
public interface CustomerNodeRepository extends GraphRepository<CustomerNode,Long>, CustomCustomerNodeRepository {
}
Run Code Online (Sandbox Code Playgroud)
最后一块,是实际实现我们的findCustomerNodeBySomeStrangeCriteria方法
public class CustomerNodeRepositoryImpl implements CustomCustomerNodeRepository {
public List<CustomerNode> findCustomerNodeBySomeStrangeCriteria(Object criteria) {
//implementation code
}
}
Run Code Online (Sandbox Code Playgroud)
所以,有几点需要注意;
Impl,由Spring Data接收(所以在这种情况下CustomNodeRepositoryImpl)在封面下,Spring Data提供了一个代理实现,CustomerNodeRepository作为自动构建GraphRepository和我们的类实现的合并CustomCustomerNodeRepository.类的名称的原因是允许Spring Data轻松/成功地获取它(这可以被覆盖,因此它不会查找*Impl)
| 归档时间: |
|
| 查看次数: |
2211 次 |
| 最近记录: |