`
NetBus
  • 浏览: 145462 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate,憋脚的ORM框架

阅读更多

  以前一直使用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、大型项目不适用。

分享到:
评论
15 楼 jersey109 2011-09-11  
我也是很郁闷,hibernate越用越郁闷,我觉得用hibernate还不如用原来的JDBC好用.
14 楼 guooo 2008-10-08  
Hibernate一直理解不够透彻,都是在用ibatis,感觉比较简单,灵活
13 楼 yy77 2007-12-26  
6.DB级的SQL特性很难用上
不同意。其实hibernate开源的好处就在于可扩展。自己继承几个类写写就至少能把DB级别的函数都包含进去了。
12 楼 haha1903 2007-12-14  
fight_bird 写道
NetBus 写道
fight_bird 写道
iBATIS一直在用,实践证明完全胜任千万级数据量的系统,常用的调优手段如:sql优化、iBatis cache方式选择、少量Procedures等技术手段清晰、可控,辅以自动脚本生成工具,简单增删改的开发效率也不比Hibernate低太多,组合查询更是强项,脚本化的sql拼接很便利和可靠。

至于数据库平台无关的问题,基本赞同楼主的看法,只要有一定规模的项目,绝少有客户会要求实现数据库平台无关的,倒是要求读取遗留系统的需求很多,这正是iBATIS的强项——灵活性。

Hibernate未深入研究,不想多妄论。
国人Linux_China先生为Intellij Idea写了一个iBatis插件,非常好用。

居然支持写sql语句的提示,还支持##的变量提示,太强悍了~

我们有自己实现的脚本生成Utils类,实现单对象实例的resultMap、insert、update、delete等脚本片段以及VO类的自动生成,基本够用了。

iBATIS目前相对Hibernate的最大不足是无级联数据增删改的支持,这也是增删改实现效率低于Hibernate的主要原因,希望3.0能实现。


ibatis 本身就有个 eclipse 插件生成。
11 楼 SINCE1978 2007-11-27  
hibernate理念是不错
但是对于大型数据库的遗留系统,特别是表间关系复杂、数据量大的整合项目似乎hibernate确实不合适吧?
10 楼 gstripe 2007-11-26  
我虽然用的不熟,但是我已经被H的理念给折服了。
9 楼 dingyuan 2007-11-26  
楼主列出来的缺点都不是缺点,因为这些都能解决,不是问题,你只要人认真看官方文档。。。。是你没有用好hibernate
8 楼 daquan198163 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、大型项目不适用。
何出此言?
7 楼 daquan198163 2007-11-26  
为什么总有人觉得用了hibernate就不能用ibatis了呢,同一个项目里可以结合使用的,各自发挥长处
6 楼 NetBus 2007-11-26  
downpour 写道
看来你还没有使用好Hibernate,没有形成最佳实践就来妄下结论是不对的。


我觉得我也是没有形成最佳实践,但是我列出来的几个缺点使我没有再继续下去的信心了。
5 楼 downpour 2007-11-26  
看来你还没有使用好Hibernate,没有形成最佳实践就来妄下结论是不对的。
4 楼 fight_bird 2007-11-26  
NetBus 写道
fight_bird 写道
iBATIS一直在用,实践证明完全胜任千万级数据量的系统,常用的调优手段如:sql优化、iBatis cache方式选择、少量Procedures等技术手段清晰、可控,辅以自动脚本生成工具,简单增删改的开发效率也不比Hibernate低太多,组合查询更是强项,脚本化的sql拼接很便利和可靠。

至于数据库平台无关的问题,基本赞同楼主的看法,只要有一定规模的项目,绝少有客户会要求实现数据库平台无关的,倒是要求读取遗留系统的需求很多,这正是iBATIS的强项——灵活性。

Hibernate未深入研究,不想多妄论。
国人Linux_China先生为Intellij Idea写了一个iBatis插件,非常好用。

居然支持写sql语句的提示,还支持##的变量提示,太强悍了~

我们有自己实现的脚本生成Utils类,实现单对象实例的resultMap、insert、update、delete等脚本片段以及VO类的自动生成,基本够用了。

iBATIS目前相对Hibernate的最大不足是无级联数据增删改的支持,这也是增删改实现效率低于Hibernate的主要原因,希望3.0能实现。
3 楼 NetBus 2007-11-26  
fight_bird 写道
iBATIS一直在用,实践证明完全胜任千万级数据量的系统,常用的调优手段如:sql优化、iBatis cache方式选择、少量Procedures等技术手段清晰、可控,辅以自动脚本生成工具,简单增删改的开发效率也不比Hibernate低太多,组合查询更是强项,脚本化的sql拼接很便利和可靠。

至于数据库平台无关的问题,基本赞同楼主的看法,只要有一定规模的项目,绝少有客户会要求实现数据库平台无关的,倒是要求读取遗留系统的需求很多,这正是iBATIS的强项——灵活性。

Hibernate未深入研究,不想多妄论。
国人Linux_China先生为Intellij Idea写了一个iBatis插件,非常好用。

居然支持写sql语句的提示,还支持##的变量提示,太强悍了~
2 楼 fight_bird 2007-11-26  
iBATIS一直在用,实践证明完全胜任千万级数据量的系统,常用的调优手段如:sql优化、iBatis cache方式选择、少量Procedures等技术手段清晰、可控,辅以自动脚本生成工具,简单增删改的开发效率也不比Hibernate低太多,组合查询更是强项,脚本化的sql拼接很便利和可靠。

至于数据库平台无关的问题,基本赞同楼主的看法,只要有一定规模的项目,绝少有客户会要求实现数据库平台无关的,倒是要求读取遗留系统的需求很多,这正是iBATIS的强项——灵活性。

Hibernate未深入研究,不想多妄论。
1 楼 zhangfengsimon 2007-11-26  
是啊 感觉太多left out join 了

相关推荐

    Hibernate框架ORM的实现原理

    **Hibernate**是一款流行的开源ORM框架,由Gavin King创建,并得到了广泛的社区支持。Hibernate通过提供一套高级的数据访问API,简化了Java应用程序与关系型数据库之间的交互过程。Hibernate不仅支持传统的CRUD操作...

    基于java 简易ORM 框架实现(二)

    总之,通过阅读这篇“基于Java简易ORM框架实现(二)”的文章,读者可以了解到ORM框架的基本原理和实现细节,这对于理解和使用现有的ORM框架(如Hibernate、MyBatis)或者自行构建ORM解决方案都有很大的帮助。...

    将Hibernate和iBatis两Orm框架整合,取长补短

    Hibernate是一个全面的ORM框架,它能够自动管理数据库会话,提供透明的对象持久化服务。通过配置XML或注解,Hibernate可以将Java对象与数据库表进行映射,使得开发者几乎可以完全脱离SQL,专注于业务逻辑。而iBatis...

    基于java 简易ORM 框架实现(一)

    在Java领域,ORM框架如Hibernate、MyBatis等被广泛应用。这里,我们将以一个简单的自定义ORM框架为切入点,了解其基本原理和实现。 首先,我们要明确ORM框架的核心功能:数据对象(DO)与数据库表之间的映射、CRUD...

    hibernate-orm-master.zip

    Hibernate ORM(Object-Relational Mapping)是Java领域中最受欢迎的持久化框架之一,它提供了一种便捷的方式将Java对象映射到关系数据库,从而实现了对象-关系的解耦。"hibernate-orm-master.zip"文件包含了...

    Spring整合其他ORM框架

    Spring 提供了对多种 ORM 框架的集成支持,如 Hibernate、MyBatis、JPA 等,使得开发者可以充分利用 Spring 的优势进行数据操作。 1. **Spring 整合 Hibernate**:Hibernate 是一款流行的 ORM 框架,它允许开发者用...

    Uncode-DAL 是 Java 通用数据访问组件,基于 mybatis、spring jdbc、hibernate 等 ORM 框架开发,同时支持基于多数据源的读写分离、主备切换、故障转移.zip

    [目录]功能概述基于mybatis、spring jdbc、hibernate等两大orm框架实现通用dal层功能,并可以与现有项目完全兼容。同时也可以在已经实现的orm框架之间相互切换,不需要对任何代码作任何关联。实现dal层cache,可以...

    Hibernate源码(hibernate-orm-main.zip)

    Hibernate源码(hibernate-orm-main.zip)Source Code: Hibernate ORM 是一个为应用程序、库和框架提供对象/关系映射 (ORM) 支持的库。 它还提供了 JPA 规范的实现,这是 ORM 的标准 Java 规范。

    orm框架

    NHibernate是Hibernate(Java平台的ORM框架)的.NET版本,它支持多种数据库,如MySQL、Oracle、SQL Server等。NHibernate提供了丰富的API,可以进行复杂的查询操作,同时还支持懒加载、级联操作、事务管理等功能,极...

    hibernate-orm-3.3源码

    Hibernate,作为一个强大的对象关系映射(ORM)框架,一直以来都是Java开发者的重要工具。其3.3版本是 Hibernate 的一个重要里程碑,为开发者提供了丰富的功能和优化的性能。本文将针对《hibernate-orm-3.3源码》...

    hibernate-orm-4.3.9源码

    《深入剖析Hibernate ORM框架:基于hibernate-orm-4.3.9源码》 Hibernate,作为Java领域中的一款知名对象关系映射(ORM)框架,极大地简化了数据库操作,使得开发者可以更加专注于业务逻辑而不是数据库交互。本文将...

    高性能的开源Java ORM框架-Ujorm

    Ujorm 它是一个高性能的开源Java ORM框架,尤其针对持久层的快速开发,在搜索查询的测试中,Ujorm的运行速度比其他竞争产品要快很多。 Ujorm在很多方面展开创新,在和Hibernate的比较中,Ujorm也拥有一些优势。...

    .NET ORM框架

    除了Entity Framework,还有其他一些优秀的ORM框架,例如NHibernate,它源自Java平台的Hibernate,提供了丰富的功能和高度的灵活性。另一个值得注意的ORM框架是Dapper,这是一个轻量级且高效的ORM,特别适合性能要求...

    高效使用JavaEE ORM框架

    在Java开发领域,ORM框架众多,包括Hibernate、iBatis(现称为MyBatis)、TopLink、JDO(Java Data Objects)和JPA(Java Persistence API)等。这些框架的主要目标是减少程序员处理数据库交互时的工作量,并提高...

    sqltoy-orm框架系统是比hibernate+myBatis更加贴合项目的orm框架.rar

    sqltoy-orm是比hibernate+myBatis(plus)更加贴合项目的orm框架(依赖spring),具有jpa式的对象CRUD的同时具有比myBatis(plus)更直观简洁性能强大的查询功能。 支持以下数据库: oracle 11g+ db2 9.5+,建议从10.5 开始...

    ORM框架-三层架构

    常见的ORM框架有Hibernate、MyBatis、Entity Framework等。在本例中,可能涉及的具体内容包括如何创建实体类,定义对象属性与数据库字段的对应关系,以及如何使用ORM框架进行数据的增删改查操作。 三层架构则是一种...

Global site tag (gtag.js) - Google Analytics