JPA vs Spring JdbcTemplate [已关闭]
对于新项目,JPA始终是处理关系数据的推荐工具,还是Spring JdbcTemplate是更好的选择?在回答中需要考虑的一些因素:
- 新数据库模式与预先存在的模式和表
- 开发人员专业知识水平
- 易于与数据缓存层集成
- 性能
- 还有其他相关因素需要考虑吗?
对于新项目,JPA始终是处理关系数据的推荐工具,还是Spring JdbcTemplate是更好的选择?在回答中需要考虑的一些因素:
如果您不想通过域模型访问数据库模式,请使用Spring JdbcTemplate。使用JdbcTemplate,您使用的是较低级别的访问,具有更大的灵活性,但可能也具有更多的样板。
Spring JdbcTemplate可以更容易地与异国情调的数据库模式和存储过程焦点一起使用。使用 JPA,您需要确保数据库模式正确映射到域模型。
这两种技术都需要开发人员了解关系数据库、SQL 和事务。但是,使用JPA,您可以获得更多隐藏的复杂性。
据我所知,JPA更容易插入到数据缓存层,因为面向对象的焦点使缓存条目识别,更新和失效更容易。
您可以更好地微调基于 JdbcTemplate 的后端,但在大多数情况下,涉及的代码更多。
需要考虑的其他一个方面是,尽管使用 JPA,您可以获得数据库模式的域模型,但您经常需要使用其他 DTO 类。使用 JdbcTemplate,您可以直接操作 DTO 类。
我对这篇文章有点晚了,但我倾向于使用JdbcTemplate而不是ORM。我非常了解SQL(非常了解),并且真的不想从我的数据库“抽象”出来。我发现大多数时候,我的应用程序都在使用数据库视图,我将大多数业务逻辑推到那里。我有具有JdbcTemplate实现的正确分层DAO。它感觉“干净”,大多数样板代码都被JdbcTemplate隐藏了(它的在线文档似乎比ORM的东西好得多)。我使用像Hibernate这样的东西的时间有限,我发现当它工作时,它为我节省了一些时间......但是当它不能正常工作时,它花费了我几天的“WTF”调试。我从来没有花超过20分钟来调试JdbcTemplate DAO impls。正如其他人所指出的那样,我认为关键是您对SQL / Schema Design的舒适度。