我曾与 Ibatis 和 Hibernate 合作过。Ibatis 简单明了。如果您不小心,Hibernate 可能会变得复杂,但它对您有很大帮助。spring-jdbc 比原始 JDBC 更好。
Hibernate 最大的优势是能够映射到不同的数据库。您甚至可以关闭模式前缀。您可以选择使用内存数据库进行测试,或者让开发人员使用与生产目标不同的本地数据库(例如,如果您的目标是 Oracle 并且许可证是一个问题),或者能够针对多个数据库。使用 Hibernate 可以轻松交换 id 生成器。使用 Hibernate 原生 SQL 是一种选择,但使用 Ibatis 则别无选择。
此外,很难甚至不可能保持 Ibatis 映射文件干燥。如果您有多个具有不同 where 子句的查询,则会导致 cut-n-paste。有了 Hibernate,就没有那么多重复了。
顺便说一下,Ibatis 和 Hibernate 都有声明式缓存机制。当然,Hibernate 的参与度要高得多。
spring-jdbc 分享了我为 Ibatis 列出的所有缺点。另外我认为它没有缓存机制。它的主要好处是 JDBC 对象没有被很好地隐藏,因此如果需要,您可以更轻松地直接访问它们。
Spring 集成了所有三种替代方案,spring 支持不是差异化因素。
还有一件事:Hibernate 与人工键配合得很好。它可以管理复合业务密钥,但工作量更大。Ibatis 和 spring-jdbc 还不够复杂,不足以让这个问题对他们产生影响。
如果您的开发人员谨慎而彻底,并且您可以保持方法简单(例如,使用每个请求的会话,不保留从一个会话到下一个会话的任何对象,以及使用人工密钥),那么请使用 Hibernate。如果您决定不需要 Hibernate 提供的数据库抽象,或者您不信任开发人员提供的锋利工具,那么请使用 Ibatis。记住 spring-jdbc 作为后备执行需要裸机 jdbc 调整的特定查询。
顺便说一句,Grails 和 GORM 使 Hibernate 更容易进行试验,因为设置时间要少得多,Grails 从内存数据库开始,您无需编写映射文件就可以过关。