Spring 与 Neo4j、GraphRepository 对比手工接口

2023-12-28

我发现有一个叫做GraphRepository的接口。我有一个存储库,供用户实现一个可以完成其工作的自制界面,但我想知道,我不应该实现 GraphRepository 吗?即使实现起来会很长并且某些方法将毫无用处,但我认为这是一个标准,并且我已经重新编码了该接口中定义的很多方法。

那么我应该编写“YAGNI”代码还是不尊重标准? 你有什么建议?


您不需要实际实现 GraphRepository,而是扩展它。的校长Spring-Data是所有样板 CRUD 代码都被处理(通过在启动时代理),因此您所要做的就是为扩展 GraphRepository 的特定实体创建一个接口,然后仅添加您需要的特定方法。

例如;如果我有一个实体CustomerNode,要创建标准 CRUD 方法,我可以创建一个新接口CustomerNodeRepository extends GraphRepository<CustomerNode,Long>。所有方法都来自GraphRepository(例如 save、findAll、findOne、delete、deleteAll 等)现在可以从CustomerNodeRepository并由 Spring-Data-Neo4J 实现,无需编写一行实现代码。

该模式现在允许您处理特定的存储库代码(例如 findByNameAndDateOfBirth),而不是简单的 CRUD 内容。

Spring-Data 包对于存储库交互非常有用。它可以减少大量代码(代码行数减少了 80% 以上),强烈建议使用它

编辑:实现自定义执行

如果您想将自己的自定义行为添加到存储库方法中,您可以创建合并接口和自定义实现的概念。例如,假设我想创建一个名为findCustomerNodeBySomeStrangeCriteria为此,我实际上想链接到关系数据库来执行该功能。

首先我们定义一个单独的、独立的接口only包括我们的“额外”方法。

public interface CustomCustomerNodeRepository {
   List<CustomerNode> findCustomerNodeBySomeStrangeCriteria(Object strangeCriteria);
}

接下来我们更新我们的普通接口,不仅扩展 GraphRepository,还扩展我们新的自定义接口

public interface CustomerNodeRepository extends GraphRepository<CustomerNode,Long>, CustomCustomerNodeRepository {

}

最后一部分,是实际实现我们的findCustomerNodeBySomeStrangeCriteria method

public class CustomerNodeRepositoryImpl implements CustomCustomerNodeRepository {

   public List<CustomerNode> findCustomerNodeBySomeStrangeCriteria(Object criteria) {
    //implementation code
}

}

所以,有几点需要注意;

  • 我们创建一个separate接口来定义具有自定义实现的任何自定义方法(与 Spring-Data 兼容的“findBy...”方法不同)
  • 我们的 CustomerNodeRepository 接口(我们的“主”接口)扩展了 GraphRepositoryand我们的“定制”款
  • 我们实施only实现类中的“自定义”方法only自定义界面
  • “自定义”实现类必须(默认情况下)称为我们的“主”接口Impl由 Spring Data 拾取(所以在本例中CustomNodeRepositoryImpl)

在幕后,Spring Data 提供了一个代理实现CustomerNodeRepository作为自动构建的合并GraphRepository和我们班实施CustomCustomerNodeRepository。类名称的原因是为了让 Spring Data 能够轻松/成功地获取它(这个can被覆盖,因此它不会寻找 *Impl)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring 与 Neo4j、GraphRepository 对比手工接口 的相关文章

随机推荐

  • 从 Gradle 构建脚本中提取常用方法

    我有一个 Gradle 构建脚本 build gradle 其中我创建了一些任务 这些任务主要由方法调用组成 调用的方法也在构建脚本中 现在 情况是这样的 我正在创建大量构建脚本 其中包含不同的任务 但使用原始脚本中相同的方法 因此 我想以
  • POST StreamContent 包含多个文件

    下面的代码片段成功地将单个文件 HttpPosts 到 WebAPI 我想扩展它来构建包含多个文件的 StreamContent 类似于 Fiddler 多文件帖子 我知道我应该在 StreamContent 中添加一个 边界 但我不确定具
  • html5 视频无法在 ipad 上运行

    我有一个 html5 视频 应该可以在 ipad 上运行 控件必须隐藏 并且当用户点击 ipad 时 必须播放 html5 视频 我正在使用 html5video js 我在 ipad 上只能看到海报图像 当我点击 ipad 时 什么也没有
  • 确定十进制展开中的最长重复周期

    今天我遇到了这篇关于十进制扩展的文章 http mathworld wolfram com DecimalExpansion html我立即受到启发 重新修改我的解决方案包含这些新的数学知识以获得更有效的解决方案 无暴力破解 简而言之 问题
  • vue.js 路由器视图的多重转换

    如果我有一个像这样定义的 vue router router view 元素
  • Handler.php 第 133 行中的 HttpException:此操作未经授权

    我已经使用 laravel 5 3 创建了一个应用程序 它在本地主机上运行良好 但在我将所有代码上传到服务器上后 出现以下错误 Symfony Component HttpKernel Exception HttpException in
  • prevObject 是什么?为什么我的选择器返回它?

    我试图从元素中获取顶部 但收到此错误 这是什么意思以及如何摆脱它 hover offset top gt Uncaught TypeError Cannot read property top of undefined hover div
  • SUPEE 7405 补丁后上传文件的 Chmod 640

    安装 SUPEE 7405 补丁后 我们注意到从管理员上传图像时出现问题 所有文件权限都设置为 CHMOD 640 这使得所有用户都无法访问它们 有没有不涉及重写 lib Varien File Uploader php 文件的解决方案 S
  • 如何配置 Jest 以与 Expo SDK 32 配合使用

    我有一个 Expo 应用程序 正在使用 SDK 28 我的团队决定我们应该更新到最新版本 这意味着更新 React Native 因为最新的 SDK 使用 RN 0 57 和 Babel 当我们更新依赖项并修复配置文件时 Jest 开始向我
  • 您可以将文件传递到天蓝色管道吗?

    我有一个用 Typescript 编写的网站 其中有一个按钮可以触发天蓝色管道运行 我想将一些东西作为参数从网站传递到管道 我看到您可以将 yaml 结构传递为object到管道 是否可以将从 xlsx 文件转换而来的 yaml 传递到管道
  • 删除记录后如何删除文件?

    我有一张桌子 CREATE TABLE photo photo id BIGINT NOT NULL AUTO INCREMENT property id BIGINT NOT NULL filename VARCHAR 50 NOT NU
  • XSL 中 的替换

    我正在尝试修改旧版本的 xsl 我遇到以下情况
  • Java - 将 JFrame 设置为全屏时屏幕变黑

    我正在尝试在 Canvas 上绘制一些内容 将其添加到 JFrame 中 然后将此 JFrame 设置为全屏 我的问题是 在全屏模式下我只看到黑屏 在屏幕变黑之前 我很快就能看到画布的粉红色背景 直接在 JFrame 上绘图 然后将其设置为
  • Node.js Knex 与 Sequelize 有何相似/不同?

    我从 IRC 频道得到的答案 Sequelize 是一个 ORM 其中包含一些查询构建器的内容 膝关节是just查询构建器 而不是 ORM ORM 实际上并不能很好地适应许多用例 很容易遇到它们可以表达的内容的限制 最终需要突破它们 但这并
  • 转换指针 - 运行时有什么区别?

    考虑以下小示例代码 include
  • WPF ObservableCollection.Remove 抛出 NullReferenceException

    调用删除操作的代码正常工作 这是我第一次收到 NullReferenceException 我试图弄清楚我是否可能做错了什么 以及是否可以避免异常以使软件更加防弹 相对而言 大量的 System Windows DescendentsWal
  • 区分每个元素中的第一个和最后一个元素?

    example each do e do something here end 在这里 我想对每个元素中的第一个和最后一个元素做一些不同的事情 我应该如何实现这一点 当然 我可以使用循环变量 i 并跟踪 ifi 0 or email pro
  • MRTK 摇杆输入

    我一直在尝试弄清楚如何从控制器访问拇指杆输入MRTK 我是编码新手 文档对我来说有点太混乱了 无法理解 我发现一个指针点击onPointerClick方法 但是我无法计算出其他输入 我确信这很简单 我只需要看一个例子 任何帮助表示赞赏 Th
  • 使用 XMLStarlet 插入太长而无法在命令行中插入的单个值

    假设我有一个 xml 文件
  • Spring 与 Neo4j、GraphRepository 对比手工接口

    我发现有一个叫做GraphRepository的接口 我有一个存储库 供用户实现一个可以完成其工作的自制界面 但我想知道 我不应该实现 GraphRepository 吗 即使实现起来会很长并且某些方法将毫无用处 但我认为这是一个标准 并且