对于使用Spring与JDBCTemplates,iBatis/myBatis或Hibernate的新项目?

Mar*_*rco 6 spring persistence hibernate ibatis mybatis

您好我们正在开始一个项目,我们必须在使用Spring JDBCTemplates,iBatis/myBatis或Hibernate作为持久层之间做出决定.我或多或少熟悉他们两个人的概念,但我想知道人们目前倾向于使用什么.

我的要求是:

  • 保持一切尽可能简单
  • 易于学习和使用
  • 高性能
  • 最佳开发者生产力
  • 必须可以在Spring 3中使用

如上所述,我们希望尽可能简化一切.我倾向于倾向于iBatis/myBatis,因为它看起来更容易使用,我们不需要真正的OR Mapper.但我真的很期待向使用这些框架的人学习.

Nat*_*hes 5

我曾使用过 Ibatis 和 Hibernate。Ibatis 简单明了。如果您不小心,Hibernate 可能会变得很复杂,但它对您有很大帮助。spring-jdbc 比原始 JDBC 更好。

Hibernate最大的优势是能够映射到不同的数据库。您甚至可以关闭架构前缀。您可以选择使用内存数据库进行测试,或者让开发人员使用与生产目标不同的本地数据库(例如,如果您的目标是 Oracle 并且许可证是一个问题),或者能够针对多个数据库。使用 Hibernate 可以轻松更换 id 生成器。对于 Hibernate,本机 SQL 是一种选择,但对于 Ibatis,则别无选择。

此外,保持 Ibatis 映射文件干燥也是很难甚至不可能的。如果您有多个具有不同 where 子句的查询,则会导致剪切粘贴。使用 Hibernate 就没有那么多的重复。

顺便说一下,Ibatis 和 Hibernate 都有声明式缓存机制。当然,Hibernate 的参与要复杂得多。

spring-jdbc 具有我为 Ibatis 列出的所有缺点。另外我不认为它有缓存机制。它的主要好处是 JDBC 对象隐藏得不太好,因此您可以在需要时更轻松地直接访问它们。

Spring 与所有三种替代方案集成,Spring 支持并不是区别因素。

还有一件事:Hibernate 与人工键配合得很好。它可以管理复合业务密钥,但工作量要大得多。Ibatis 和 spring-jdbc 还不够复杂,这个问题对它们来说并不重要。

如果您的开发人员谨慎而彻底,并且您可以保持方法简单(例如,使用每个请求会话、不保留从一个会话到下一个会话的任何对象以及使用人工密钥),那么请使用 Hibernate。如果您决定不需要 Hibernate 提供的数据库抽象,或者您不信任开发人员拥有锋利的工具,那么请选择 Ibatis。请记住 spring-jdbc 作为执行需要裸机 jdbc 调整的特定查询的后备。

顺便说一句,Grails 和 GORM 使 Hibernate 更容易实验,因为设置时间少得多,Grails 从内存数据库开始,您无需编写映射文件即可完成。


小智 5

我建议你看看spring/hibernate/ibatis和JPA(2)的minuteproject逆向工程解决方案,因为它满足你的开发需求.有一件事它没有生成(还)是jdbctemplate.

在选择技术之前,我将审核适合于分项目方法的所有要点.

  • 保持一切尽可能简单:让minuteproject为您生成在iBatis(sqlMaps),Hibernate(hbm文件),JPA(orm文件或带注释的实体)中持久化所需的代码.但是所有额外的框架集成:spring配置,全面的DAO堆栈(不限于基本的CRUD操作).它可以对应于应用程序工件和时间的20%到40%.
  • 易学易用:您的模型成为您的技术教程!了解已生成的内容.您当然可以根据您的特定需求进行扩展.
  • 高性能:在Spring/hibernate或Spring/JPA的minuteproject轨道中:minuteproject提供与orm产品集成的ehcache配置生成.它提供了带有调整查询的avanced dao图层,您只需要参考它.
  • 最佳的开发人员生产力:它可以帮助您专注于您的真实业务,而不是所有繁琐的orm/dao任务.它使技术学习曲线变得扁平化.
  • 必须适用于Spring 3:春天的文物可与2.5+兼容

但最好的判断是你,所以试试你的模特.要快速了解启动/bin/start-console.(cmd/sh)的可能性,请指向您的数据库并选择生成轨道.如果你的数据库是(mysql,db2,oracle,hsqldb有默认值,如hibernatedialect预设),通常需要几分钟.要更进一步使用配置(它适用于所有数据库).

关于使用哪种技术,我个人对所有这些技术都有生产经验,但我认为像hibernate这样的orm框架的双向方面比单向sqlmap强.它可以保存配置,图形导航非常直观.

一个好东西:逃避特殊字符,如',包括在orm框架中.这是在sqlmap中执行本机sql时常遇到的问题,例如lastname ='o'hara'的插入...

我会选择Hibernate(在你提到的选择中),但是选择JPA2(如果你愿意的话).如果您想要真正的额外生产力,请将querydsl集成到其中的可编译标准API中.


Ale*_*man 2

除了 ORM 之外,Hibernate 还为您提供了很好且简单的方法来映射本机 SQL 查询,而 iBatis 仅提供 SQL 映射。因此,使用 Hibernate,您有更多选择,并且可以在需要时使用 ORM 或本机 SQL。因此我更喜欢 Hibernate。

Hibernate 确实与 Spring 集成得很好。iBatis 可能也是如此,但我从未使用过这样的集成。

这是我的两分钱。如果有人有不同意见,请发布另一个答案。