Hibernate,憋脚的ORM框架
关键字: Hibernate以前一直使用iBatis,后来看到Hibernate这么火,就研究了一下,使用过一个简单项目,感觉到非常不爽,也许是我没有使用好。来到这里一吐为快,我知道这里的hibernate高手很多,请这些高手手下留情,不要B4我。
总结:由于Hibernate的设计思想,他对简单的增、删、改、查询支持不错。对于复杂的SQL支持就欠缺了。适用于留言簿等简单的系统。
Hibernate优点:
1、配置简单,不用写Sql。
2、Cache机制做得好,能够精确Cache、Flush对象。
3、简单的增删改的Java代码简单。
4、如果不用本地SQl,就可以跨数据库。(不过,谁一天没事做就换数据库啊?)
5、简单的开发效率高。
Hibernate缺点:
1、1对1关联在load的时候,居然用left join 实现,太可怕了(右边对象的单独cache失去作用了)。
2、组合查询同jdbc一样,需要写if (xx) {CriteriaSpecification.add(Criterion)}类似语句,Java会显得完全不可读。
3、get和load似乎只适用主键,如果表上有其它条件能得到唯一对象,就必须使用list.get(0)了,郁闷。
4、由于底层sql不可控,想要优化sql困难太大了(使用本地SQL?),数据库一般都支持采用哪个索引检索,如mysql的 force index(indexname)。在这种情况下,hibernate用不上(又要写本地SQL?)。
5、调用Oracle procedure,如果procedure返回了cursor,接收cursor太复杂了。如果是cursor套cursor,那更加不可想象的复杂。
6、DB级的SQL特性很难用上,如函数,特别是insert,有很多缺省值是sysdate()一类语句,hibernate要用上,就必须写本地insertsql,这样又复杂了。
7、如果查询采用本地SQL,则你会发现在Java代码中有n多if else,StringBuffer.append,外加一个substring。
8、据我所知,99%的DBA 100%反对使用hibernate。
9、大型项目不适用。
评论
不同意。其实hibernate开源的好处就在于可扩展。自己继承几个类写写就至少能把DB级别的函数都包含进去了。
至于数据库平台无关的问题,基本赞同楼主的看法,只要有一定规模的项目,绝少有客户会要求实现数据库平台无关的,倒是要求读取遗留系统的需求很多,这正是iBATIS的强项——灵活性。
Hibernate未深入研究,不想多妄论。
居然支持写sql语句的提示,还支持##的变量提示,太强悍了~
我们有自己实现的脚本生成Utils类,实现单对象实例的resultMap、insert、update、delete等脚本片段以及VO类的自动生成,基本够用了。
iBATIS目前相对Hibernate的最大不足是无级联数据增删改的支持,这也是增删改实现效率低于Hibernate的主要原因,希望3.0能实现。
ibatis 本身就有个 eclipse 插件生成。
但是对于大型数据库的遗留系统,特别是表间关系复杂、数据量大的整合项目似乎hibernate确实不合适吧?
可怕?具体说说
2、组合查询同jdbc一样,需要写if (xx) {CriteriaSpecification.add(Criterion)}类似语句,Java会显得完全不可读。
除了Criteria还有hql呢
3、get和load似乎只适用主键,如果表上有其它条件能得到唯一对象,就必须使用list.get(0)了,郁闷。
不值一提
4、由于底层sql不可控,想要优化sql困难太大了(使用本地SQL?),数据库一般都支持采用哪个索引检索,如mysql的 force index(indexname)。在这种情况下,hibernate用不上(又要写本地SQL?)。
发现有性能问题的地方再去替换成本地SQL,应该不会太多吧。没看明白,这跟索引有什么关系
5、调用Oracle procedure,如果procedure返回了cursor,接收cursor太复杂了。如果是cursor套cursor,那更加不可想象的复杂。
不通过hibernate调procedure不就结了
6、DB级的SQL特性很难用上,如函数,特别是insert,有很多缺省值是sysdate()一类语句,hibernate要用上,就必须写本地insertsql,这样又复杂了。
同上,不通过hibernate调
7、如果查询采用本地SQL,则你会发现在Java代码中有n多if else,StringBuffer.append,外加一个substring。
用ibatis
8、据我所知,99%的DBA 100%反对使用hibernate。
先弄清楚为什么反对,毕竟他们不懂开发
9、大型项目不适用。
何出此言?
我觉得我也是没有形成最佳实践,但是我列出来的几个缺点使我没有再继续下去的信心了。
至于数据库平台无关的问题,基本赞同楼主的看法,只要有一定规模的项目,绝少有客户会要求实现数据库平台无关的,倒是要求读取遗留系统的需求很多,这正是iBATIS的强项——灵活性。
Hibernate未深入研究,不想多妄论。
居然支持写sql语句的提示,还支持##的变量提示,太强悍了~
我们有自己实现的脚本生成Utils类,实现单对象实例的resultMap、insert、update、delete等脚本片段以及VO类的自动生成,基本够用了。
iBATIS目前相对Hibernate的最大不足是无级联数据增删改的支持,这也是增删改实现效率低于Hibernate的主要原因,希望3.0能实现。
至于数据库平台无关的问题,基本赞同楼主的看法,只要有一定规模的项目,绝少有客户会要求实现数据库平台无关的,倒是要求读取遗留系统的需求很多,这正是iBATIS的强项——灵活性。
Hibernate未深入研究,不想多妄论。
居然支持写sql语句的提示,还支持##的变量提示,太强悍了~
至于数据库平台无关的问题,基本赞同楼主的看法,只要有一定规模的项目,绝少有客户会要求实现数据库平台无关的,倒是要求读取遗留系统的需求很多,这正是iBATIS的强项——灵活性。
Hibernate未深入研究,不想多妄论。
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 35777 次
- 性别:

- 来自: 重庆

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
使用iBatis的开发者有福了 ...
idea太贵了,一般公司都不会买。个人估计也不会买。所以国内的基本都是破解的.
-- by andyao -
使用iBatis的开发者有福了 ...
这个idea 插件在哪可以下载?谢谢楼主
-- by dlpower -
使用iBatis的开发者有福了 ...
可惜,IntelliJ IDEA 不免费。。。不如移植到netbeans上,同为 ...
-- by hantsy -
使用iBatis的开发者有福了 ...
强的,好像iBATIS的作者Larry也用这个,哈哈 :)
-- by linux_china -
使用iBatis的开发者有福了 ...
这个好,请问有没有for eclipse的?谢谢!
-- by dlpower






评论排行榜