论坛首页 入门技术论坛

我为什么选择 iBatis 而不是 Hibernate(对于正在选型的人的建议)

浏览 69629 次
该帖已经被评为新手帖
作者 正文
   发表时间:2007-01-01  
你们这些人,整个就是技术无聊分子.

有什么是hibernate可以完成ibatis不能完成的项目么? 没有

有什么是ibatis可以完成hibrenate不能完成的项目么? 没有

选什么技术,先看看自己的团队的技术水准,经验水平,不要做赶鸭子上架的事,真是够了!
0 请登录后投票
   发表时间:2007-01-01  
together 写道
简单一点说,很多人选择A而不选择B,都是因为先入为主。

客观的说,从长远来考虑,还是应该采用HB。比如现在我们的系统,如果需要部署到oracle/mssql/db2/mysql/pg/hsql/firebird,所需要做的只是加一个JDBC驱动,再改一下hb.cfg.xml中连接数据库的配置。这一点是IBATIS无论如何也做不到的。


这种也是设想的需求, 我的系统用ibatis jdo2 和hibernate同时实现过一次,DB可以选择到ms sql mysql 和orcael,DAO可以是ibatis 还是jdo2 还是hibernate. (当时弄这个,只是为了随时附和客户的要求而已).

所以这不是ibatis的问题,是技术功底问题.
0 请登录后投票
   发表时间:2007-01-01  
各位牛人们,你们有大型hibernate项目经验的话回答下我的疑惑

http://www.iteye.com/topic/42667


目前我觉得有的是ibatis可以完成hibrenate不能完成的项目
0 请登录后投票
   发表时间:2007-01-02  
together 写道
简单一点说,很多人选择A而不选择B,都是因为先入为主。

客观的说,从长远来考虑,还是应该采用HB。比如现在我们的系统,如果需要部署到oracle/mssql/db2/mysql/pg/hsql/firebird,所需要做的只是加一个JDBC驱动,再改一下hb.cfg.xml中连接数据库的配置。这一点是IBATIS无论如何也做不到的。

这种需求具有普遍性吗,你们的项目会在中途改变数据库吗
0 请登录后投票
   发表时间:2007-01-02  
要优雅是吧。
使用dynamic-update和dynamic-insert
<class
name="ClassName" (1)
table="tableName" (2)
discriminator-value="discriminator_value" (3)
mutable="true|false" (4)
schema="owner" (5)
catalog="catalog" (6)
proxy="ProxyInterface" (7)
dynamic-update="true|false" (8)
dynamic-insert="true|false" (9)
select-before-update="true|false" (10)
polymorphism="implicit|explicit" (11)
Basic O/R Mapping
Hibernate 3.2.0.ga 50
where="arbitrary sql where condition" (12)
persister="PersisterClass" (13)
batch-size="N" (14)
optimistic-lock="none|version|dirty|all" (15)
lazy="true|false" (16)
entity-name="EntityName" (17)
check="arbitrary sql check condition" (18)
rowid="rowid" (19)
subselect="SQL expression" (20)
abstract="true|false" (21)
node="element-name"
/>


(8) dynamic-update (optional, defaults to false): Specifies that UPDATE SQL should be generated at runtime
and contain only those columns whose values have changed.
(9) dynamic-insert (optional, defaults to false): Specifies that INSERT SQL should be generated at runtime
and contain only the columns whose values are not null.
(10) select-before-update (optional, defaults to false): Specifies that Hibernate should never perform an
SQL UPDATE unless it is certain that an object is actually modified. In certain cases (actually, only when a
transient object has been associated with a new session using update()), this means that Hibernate will
perform an extra SQL SELECT to determine if an UPDATE is actually required.

Note that the dynamic-update and dynamic-insert settings are not inherited by subclasses and so may also be
specified on the <subclass> or <joined-subclass> elements. These settings may increase performance in
some cases, but might actually decrease performance in others. Use judiciously.
Use of select-before-update will usually decrease performance. It is very useful to prevent a database update
trigger being called unnecessarily if you reattach a graph of detached instances to a Session.
If you enable dynamic-update, you will have a choice of optimistic locking strategies:
• version check the version/timestamp columns
• all check all columns
• dirty check the changed columns, allowing some concurrent updates
• none do not use optimistic locking
We very strongly recommend that you use version/timestamp columns for optimistic locking with Hibernate.
This is the optimal strategy with respect to performance and is the only strategy that correctly handles modifications
made to detached instances (ie. when Session.merge() is used).
0 请登录后投票
   发表时间:2007-01-02  
cxd110 写道
together 写道
简单一点说,很多人选择A而不选择B,都是因为先入为主。

客观的说,从长远来考虑,还是应该采用HB。比如现在我们的系统,如果需要部署到oracle/mssql/db2/mysql/pg/hsql/firebird,所需要做的只是加一个JDBC驱动,再改一下hb.cfg.xml中连接数据库的配置。这一点是IBATIS无论如何也做不到的。

这种需求具有普遍性吗,你们的项目会在中途改变数据库吗

会。
我现在就从mysql往postgresql切。呵呵。
0 请登录后投票
   发表时间:2007-01-02  
我原先公司的一个项目从04年开始就用iBATIS了,坚持了两年,还是转向了Hibernate. 说白了,iBATIS只是一个SQL Map的工具,方便你将原先混杂在程序中的SQL语句提炼出来,并且用一些第三方提供的Cache算法提高语句执行效率.
0 请登录后投票
   发表时间:2007-01-02  
这个帖子怎么还没有结啊,讨论了那么久,有啥意思,爱用啥用啥。都各有优势的ORM框架,何必争个你死我活呢。框架的选择是根据项目的实际情况而言的,不是一概而论的。

楼主也不要过于执着了,iBatis和Hibernate的优劣是不可比较的,不用过分强调哪个好哪个不好。

老实说,楼主贴的这几百行的代码和配置,就是为了解决这几个小问题,实在没有看出优美的地方。尤其是你那280行的SQL配置,敲键盘敲的手挺酸吧。我可以告诉你,Hibernate对于Dynamic Update和Select部分字段都有比你优美得多得解决方案,只是你还不知道这些方案,没有研究透彻而已。

所以,还是潜心研究好自己的代码,少发言。
0 请登录后投票
   发表时间:2007-01-02  
同意楼上,看了上面这么多讨论还是那样,什么优雅不优雅的问题都非常的主观,特别是楼主贴了很长的代码和sql语句后说:很优雅!! 但是一千个观众就有一千个哈姆雷特.在我看来很不优雅(仅一家之言).比如说

1,更新的问题,楼主非说sql,或者hsql只能写在java代码中,其实这些语句都是可以写在映射文件中的,根本没有必要写在java代码中,如果对hibernate有比较深入的研究是不会不知道这一点的

2,其实深入浅出hibernate上对ibatis和hibernate的适用场景有很详细的描述很有道理, 大家不防一看.

3,看到有人说hibernate的开发效率不比ibatis高,我觉得很疑惑,我用过jdbc和hibernate,用hibernate做过好几个项目,深知hibernate比jdbc的开发效率高得多,这个是从实践中得到的,有句话说得好,用过之后才知道,只看看文旦对hibernate的在真实项目中的效率是不会有深刻认识的.

hibernate确实可以缩短开发周期,通过hibernate,我们能以惊人的速度修改数据结构.

hibernate最差的地方是不允许你轻松控制如何查询数据,并且有一些查询的效率非常低下,特别是在1:n,和m:n查询的时候,查询更加复杂,但是无论如何,这不是hibernate的一个缺点,而是技术特性,但是hibernate也给了我们弥补的机会,就是hsql和原生sql.

任何对hibernate或者ibatis一板子打死人都是对hibernate或者ibatis不了解的人,这一点是确定无疑的
1 请登录后投票
   发表时间:2007-01-02  
引用
jeffrey_gao     5 小时前

我原先公司的一个项目从04年开始就用iBATIS了,坚持了两年,还是转向了Hibernate. 说白了,iBATIS只是一个SQL Map的工具,方便你将原先混杂在程序中的SQL语句提炼出来,并且用一些第三方提供的Cache算法提高语句执行效率.


能讲讲为什么吗?
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics