Java 如何设计一个应用程序来轻松地将Hibernate与JDBC交换
首先,这个问题可能是重复的 但是,既然这个问题没有得到答案,我在寻找答案,我又问了一遍 假设我们有一个使用Hibernate的应用程序,我们决定将它全部改回JDBC查询。(由于某些原因,将完全删除休眠代码和依赖项)Java 如何设计一个应用程序来轻松地将Hibernate与JDBC交换,java,hibernate,jpa,jdbc,orm,Java,Hibernate,Jpa,Jdbc,Orm,首先,这个问题可能是重复的 但是,既然这个问题没有得到答案,我在寻找答案,我又问了一遍 假设我们有一个使用Hibernate的应用程序,我们决定将它全部改回JDBC查询。(由于某些原因,将完全删除休眠代码和依赖项) 这样做的逻辑方式是什么?(按时间顺序一步一步地)正如评论中所指出的,这非常依赖于应用程序,但我将尝试写一些我通常会采取的步骤: 1) 向项目中添加必要的依赖项(如果您想使用普通JDBC,您可能已经有了它们,但是如果您想使用一些额外的框架,这一步可能是必要的) 2) 确定应用程序中使
这样做的逻辑方式是什么?(按时间顺序一步一步地)正如评论中所指出的,这非常依赖于应用程序,但我将尝试写一些我通常会采取的步骤: 1) 向项目中添加必要的依赖项(如果您想使用普通JDBC,您可能已经有了它们,但是如果您想使用一些额外的框架,这一步可能是必要的) 2) 确定应用程序中使用Hibernate的所有位置 3) 用JDBC准备的语句替换所有这些Hibernate查询。一个接一个地这样做,并测试它是否有效。如果正确编写查询,则替换查询应更改应用程序的行为。您可能希望首先熟悉数据库结构以避免错误 4) 重写所有查询后,从应用程序中删除hibernate配置文件(
*.hbm.xml
)和依赖项
5) 再次测试是否一切正常
我不知道为什么要从Hibernate切换到JDBC。使用一些ORM框架有很多优点。您是否看过其他可能更适合您的框架
(或myBatis),例如,它允许您编写简化的SQL查询,而且非常容易学习。简短回答:这没有意义 详细回答:Hibernate是一种ORM,因此它可以转换为SQL查询。例如,由Hibernate处理,因此切换到JDBC意味着您必须手动执行 使用ActiveRecord方法切换ORM是一个具有巨大开发成本的体系结构决策。任何数据访问技术都是泄漏的,因此您无法隔离数据访问代码,以便轻松地交换任何技术。出于性能考虑,您必须设计数据模型和查询,以充分利用数据库 对于中型企业应用程序,无论如何都需要特定于数据库的技术(例如CTE、窗口函数、横向联接),因此无论如何都需要原生SQL 因此,最好的方法是同时使用Hibernate和SQL,而不是选择其中一种 回答您的问题: 您可以设计DAO接口,以便始终返回DTO,这意味着您有两种实现:
- 冬眠刀
- jdbcdao
这是高度依赖于应用程序的。为什么不试试JooQ而不是纯JDBC?@fge这不是优化或转向更高性能的解决方案,而是执行此类数据层修改的逻辑顺序,正如我在评论中所说:我必须“混合”两个应用程序,一个是用JDBC查询开发的,另一个是用Hibernate开发的。由于第一个更大,我想删除所有hibernate依赖项并坚持使用JDBC。谢谢!我必须“混合”两个应用程序,一个是用JDBC查询开发的,另一个是用Hibernate开发的。因为第一个更大,所以我更容易坚持使用JDBC。尝试一下,让我知道它是如何工作的:)但是要考虑把休眠保存在较小的应用程序中,并把它合并到大的应用程序中。如果在合并后的应用程序中配置Hibernate,您仍然可以同时使用Hibernate和JDBC。专用DAO层将应用程序与数据访问细节隔离开来。使用DTO使转换成为可能,您可以一次替换一个Hibernate DAO。最后,您可以删除Hibernate DAO并坚持使用JDBC DAO。因此,您可以运行100%的JDBC数据访问层,但在设计应用程序体系结构时,选择Hibernate是很糟糕的。应用程序的Hibernate部分将被完全删除。我想知道级联和延迟加载会如何影响查询。如果在持久化/合并实体时使用级联,那么显然需要一种方法来处理JDBC。如果您还获取了实体树并依赖于延迟加载,那么您必须调整每个用例以获取准确的投影。