锁定老帖子 主题:Hibernate,憋脚的ORM框架
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2007-11-26
以前一直使用iBatis,后来看到Hibernate这么火,就研究了一下,使用过一个简单项目,感觉到非常不爽,也许是我没有使用好。来到这里一吐为快,我知道这里的hibernate高手很多,请这些高手手下留情,不要B4我。 总结:由于Hibernate的设计思想,他对简单的增、删、改、查询支持不错。对于复杂的SQL支持就欠缺了。适用于留言簿等简单的系统。
Hibernate缺点: 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-11-26
是啊 感觉太多left out join 了
|
|
返回顶楼 | |
发表时间:2007-11-26
iBATIS一直在用,实践证明完全胜任千万级数据量的系统,常用的调优手段如:sql优化、iBatis cache方式选择、少量Procedures等技术手段清晰、可控,辅以自动脚本生成工具,简单增删改的开发效率也不比Hibernate低太多,组合查询更是强项,脚本化的sql拼接很便利和可靠。
至于数据库平台无关的问题,基本赞同楼主的看法,只要有一定规模的项目,绝少有客户会要求实现数据库平台无关的,倒是要求读取遗留系统的需求很多,这正是iBATIS的强项——灵活性。 Hibernate未深入研究,不想多妄论。 |
|
返回顶楼 | |
发表时间:2007-11-26
fight_bird 写道 iBATIS一直在用,实践证明完全胜任千万级数据量的系统,常用的调优手段如:sql优化、iBatis cache方式选择、少量Procedures等技术手段清晰、可控,辅以自动脚本生成工具,简单增删改的开发效率也不比Hibernate低太多,组合查询更是强项,脚本化的sql拼接很便利和可靠。
国人Linux_China先生为Intellij Idea写了一个iBatis插件,非常好用。
至于数据库平台无关的问题,基本赞同楼主的看法,只要有一定规模的项目,绝少有客户会要求实现数据库平台无关的,倒是要求读取遗留系统的需求很多,这正是iBATIS的强项——灵活性。 Hibernate未深入研究,不想多妄论。 居然支持写sql语句的提示,还支持##的变量提示,太强悍了~ |
|
返回顶楼 | |
发表时间:2007-11-26
NetBus 写道 fight_bird 写道 iBATIS一直在用,实践证明完全胜任千万级数据量的系统,常用的调优手段如:sql优化、iBatis cache方式选择、少量Procedures等技术手段清晰、可控,辅以自动脚本生成工具,简单增删改的开发效率也不比Hibernate低太多,组合查询更是强项,脚本化的sql拼接很便利和可靠。
国人Linux_China先生为Intellij Idea写了一个iBatis插件,非常好用。
至于数据库平台无关的问题,基本赞同楼主的看法,只要有一定规模的项目,绝少有客户会要求实现数据库平台无关的,倒是要求读取遗留系统的需求很多,这正是iBATIS的强项——灵活性。 Hibernate未深入研究,不想多妄论。 居然支持写sql语句的提示,还支持##的变量提示,太强悍了~ 我们有自己实现的脚本生成Utils类,实现单对象实例的resultMap、insert、update、delete等脚本片段以及VO类的自动生成,基本够用了。 iBATIS目前相对Hibernate的最大不足是无级联数据增删改的支持,这也是增删改实现效率低于Hibernate的主要原因,希望3.0能实现。 |
|
返回顶楼 | |
发表时间:2007-11-26
看来你还没有使用好Hibernate,没有形成最佳实践就来妄下结论是不对的。
|
|
返回顶楼 | |
发表时间:2007-11-26
downpour 写道 看来你还没有使用好Hibernate,没有形成最佳实践就来妄下结论是不对的。
我觉得我也是没有形成最佳实践,但是我列出来的几个缺点使我没有再继续下去的信心了。 |
|
返回顶楼 | |
发表时间:2007-11-26
为什么总有人觉得用了hibernate就不能用ibatis了呢,同一个项目里可以结合使用的,各自发挥长处
|
|
返回顶楼 | |
发表时间:2007-11-26
1、1对1关联在load的时候,居然用left join 实现,太可怕了(右边对象的单独cache失去作用了)。
可怕?具体说说 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、大型项目不适用。 何出此言? |
|
返回顶楼 | |
发表时间:2007-11-26
楼主列出来的缺点都不是缺点,因为这些都能解决,不是问题,你只要人认真看官方文档。。。。是你没有用好hibernate
|
|
返回顶楼 | |