java - 减少 Hibernate 存储库中的样板代码/在桌面客户端-服务器应用程序中使用 Spring 的 JpaRepository 接口
问题描述
我目前正在开发一个使用 Hibernate 访问数据库的桌面 Java 客户端-服务器应用程序。许多对数据库的调用都是通用的 CRUD 操作,因此我希望有一种方法可以减少样板代码的数量。
我偶然发现了 Spring Framework 中的 JpaRepository/CrudRepository 接口,并希望能够使用其中的任何一个,但感觉好像我一直在与 Spring 的 web 应用程序焦点作斗争。例如,由于存储库是由 Spring 自动装配的,我无法实例化副本或创建静态实例,因此很难从服务器类调用存储库的任何方法。
因此,我有四个问题:
- 有没有办法使用 Spring Jpa/CrudRepository 接口而不自动装配它们?
- 有没有办法在不使用 Spring 的情况下使用任一接口?
- 桌面应用程序是否有替代界面可以实现相同目的?
- 我错过了更好的选择吗?
解决方案
chrylis 在评论中为您提供了您真正需要的答案:
使您的“程序”成为 Spring 组件
我会说适当的方法是让它成为CommandLineRunner
我什至会说:即使你从一个进程开始,你也应该维护一个类似 Web 的架构,甚至可能是应用程序中的一个 Web 服务器,以便
a) 以合理的方式使用 JPA,即有明确定义的请求,这些请求由服务器进程在单独的线程中处理
b) 在处理查询时不要阻塞 UI。
要回答您的字面问题:
有没有办法使用 Spring Jpa/CrudRepository 接口而不自动装配它们?
是的,您可以使用JpaRepositoryFactory
有没有办法在不使用 Spring 的情况下使用任一接口?
接口本身只是接口,可以在没有来自 Spring 的任何其他东西的情况下使用。当然,这样做的好处是有限的。
桌面应用程序是否有替代界面可以实现相同目的?
不,没有必要。
有没有更好的选择,我错过了。
我不这么认为,但我有偏见。
推荐阅读
- node.js - 如何在另一个组件中异步调用此服务功能?角 11
- python - 使用列表中的多个字符串命名 Excel 工作表
- java - 打破递归和迭代方法
- json - 将 json 值解析为单行
- c# - .NET Framework 4.7:从 ReadAsStringAsync 获取特定属性
- javascript - VueJs 添加 JSON 提供的自定义 CSS
- r - 使用从标头中提取的信息重命名 R 中的标头
- ffmpeg - FFMPEG vsync 删除和重新生成
- scala - Scala 3 中的 `scala.tools.nsc.MainGenericRunner` 的等价物是什么?
- capl - 我们如何在 canalyzer 中调用 .vsq 文件?