嗨,我们正在开始一个项目,在这个项目中,我们必须在我们的持久性层中选择使用、iBatis/myBatis或Hibernate。我或多或少地熟悉这两个概念,但我想知道人们目前倾向于使用什么。
我的要求是:
如前所述,我们希望一切尽可能简单。我的偏好倾向于iBatis/myBatis,因为它看起来更容易使用,而且我们不需要真正的或Mapper。但我真的很期待从使用这些框架的人那里学到东西。
发布于 2011-07-07 21:40:16
我建议您了解一下spring/hibernate/ibatis以及JPA(2)的粉碎工程逆向工程解决方案,因为它满足了您的开发需求。它没有生成(目前)的一件事是jdbctemplate。
在选择一种技术之前,我将回顾所有适合于微小项目方法的要点。
但能判断的最好的是你,所以试试看你的模型。要快速了解start /bin/start-console.(cmd/sh)的可能性,请指向数据库并选择生成跟踪。如果数据库是(mysql、db2、oracle、hsqldb有默认值,如hibernatedialect预置),通常需要几分钟。要获得更多的进展,请使用配置(它适用于所有db)。
关于使用哪种技术,我个人对所有这些技术都有生产经验,但我认为orm框架(如hibernate )的双向方面是单向sqlmap的强项。它节省了配置和图形导航是直观的。
A goody:转义特殊字符,如',是包括在orm框架中。这是您在sqlmap中执行本机sql时通常会遇到的问题,例如姓氏的插入=‘o’‘hara’.
我会选择Hibernate (您提到的选项之一),但选择JPA2 (如果您已经包括了它)。如果您想要真正的额外生产力,那么将奎尔兹尔集成到可编译的标准API中。
发布于 2011-07-07 19:34:26
我和Ibatis和Hibernate一起工作过。伊巴提斯是直截了当的。如果你不小心的话,Hibernate会变得复杂,但是它对你有很大的帮助。spring比原始JDBC更好。
Hibernate最大的优势是能够映射到不同的数据库。甚至可以关闭架构前缀。您可以选择使用内存中的数据库进行测试,或者让开发人员使用与生产目标不同的本地数据库(例如,如果您以Oracle为目标,许可证是一个问题),或者能够针对多个数据库。用Hibernate交换id生成器很容易。使用Hibernate本机SQL是一种选择,但是对于Ibatis,没有选择。
而且,很难保持Ibatis映射文件的干爽。如果您有多个具有不同where子句的查询,剪切-n粘贴将产生结果。有了Hibernate,就没有那么多的重复了。
顺便说一句,Ibatis和Hibernate都有声明式缓存机制。当然,Hibernate的问题要多得多。
spring与我列出的Ibatis的所有缺点有相同之处。此外,我认为它没有缓存机制。它的主要好处是JDBC对象没有很好地隐藏,因此如果需要,您可以更容易地直接访问它们。
Spring与所有三种选择集成在一起,spring支持不是一个区分器。
还有一件事: Hibernate与人工密钥一起工作得很好。它可以管理复合业务密钥,但它要做的工作要多得多。Ib提斯和spring还不够复杂,不足以解决这个问题。
如果您的开发人员是谨慎和彻底的,如果您可以保持您的方法简单(例如,每次使用会话请求,不保留任何对象从一个会话到下一个会话,并使用人工密钥),那么就使用Hibernate。如果您已经决定不需要Hibernate提供的数据库抽象,或者您不相信您的开发人员拥有锋利的工具,那么就使用Ib提斯吧。请记住spring作为一种倒退,以便执行需要简单jdbc调整的特定查询。
顺便说一句,Grails和GORM使Hibernate更容易实验,因为安装时间少得多,Grails开始使用内存中的数据库,无需编写映射文件就可以过活。
发布于 2011-07-07 15:52:57
除了ORM之外,Hibernate还为您提供了很好的映射本地SQL查询的方法,而iBatis则只提供了SQL映射。因此,使用Hibernate,您有更多的选项,并且可以在需要时使用ORM或本机SQL。因此我更喜欢冬眠。
Hibernate与Spring很好地集成在一起。iBatis可能也做得很好,但我从未使用过这样的集成。
这是我的两分钱。如果有人有不同的意见,请张贴另一个答案。
https://stackoverflow.com/questions/6612460
复制相似问题