Mar*_*rco 6 spring persistence hibernate ibatis mybatis
您好我们正在开始一个项目,我们必须在使用Spring JDBCTemplates,iBatis/myBatis或Hibernate作为持久层之间做出决定.我或多或少熟悉他们两个人的概念,但我想知道人们目前倾向于使用什么.
我的要求是:
如上所述,我们希望尽可能简化一切.我倾向于倾向于iBatis/myBatis,因为它看起来更容易使用,我们不需要真正的OR Mapper.但我真的很期待向使用这些框架的人学习.
我曾使用过 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.
在选择技术之前,我将审核适合于分项目方法的所有要点.
但最好的判断是你,所以试试你的模特.要快速了解启动/bin/start-console.(cmd/sh)的可能性,请指向您的数据库并选择生成轨道.如果你的数据库是(mysql,db2,oracle,hsqldb有默认值,如hibernatedialect预设),通常需要几分钟.要更进一步使用配置(它适用于所有数据库).
关于使用哪种技术,我个人对所有这些技术都有生产经验,但我认为像hibernate这样的orm框架的双向方面比单向sqlmap强.它可以保存配置,图形导航非常直观.
一个好东西:逃避特殊字符,如',包括在orm框架中.这是在sqlmap中执行本机sql时常遇到的问题,例如lastname ='o'hara'的插入...
我会选择Hibernate(在你提到的选择中),但是选择JPA2(如果你愿意的话).如果您想要真正的额外生产力,请将querydsl集成到其中的可编译标准API中.
除了 ORM 之外,Hibernate 还为您提供了很好且简单的方法来映射本机 SQL 查询,而 iBatis 仅提供 SQL 映射。因此,使用 Hibernate,您有更多选择,并且可以在需要时使用 ORM 或本机 SQL。因此我更喜欢 Hibernate。
Hibernate 确实与 Spring 集成得很好。iBatis 可能也是如此,但我从未使用过这样的集成。
这是我的两分钱。如果有人有不同意见,请发布另一个答案。
| 归档时间: | 
 | 
| 查看次数: | 13062 次 | 
| 最近记录: |