`

为什么要选择Hibernate

阅读更多
huashuizhuhui 写道
fainfy 写道
peihexian 写道
说hibernate好用的人,你开发的系统业务数据量没上过几百万上千万的话别说话。


几百万上千万就把hibernate用跨了,说明你根本就是在乱用。

我这里数据量没这么大,没有发言权,你说说你是怎么用的啊


说说我们的选择吧,前面提到我们已经放弃了Struts,转投到Spring MVC,但是Hibernate还是保留了。
原因有:
1. 我们是做平台的,客户要求多种多样,我们是需要支持多个数据库的,Hibernate可以比较容易屏蔽数据库的差异;
2. Hibernate采用面向对象的方式来写SQL,也就是HQL和Criteria,在数据库和Dao之间多了一层,数据库的改动可以通过映射关系屏蔽部分影响。
3. 因为我们是要不断的增加功能,偶然要做做系统重构,快速快发尤其重要,Hibernate的代码量和改动量都要比其他框架来的少,起码经过我们的封装已经使得用起来是很简单了。
4. 对于性能有影响的地方和很难用Hibernate表达的地方我们会采用JdbcTemplate,或者采用View封装一次再map到Hibernate,采用Hibernate也不排斥其他持久层框架的存在。
5. 尽量少用One to many, Many to one等功能,可能这里不太OO,但是代码明了,不容易出问题。
6. 我们暂时还没有遇到几千万的数据量那么大的客户,要做到那么大数据量的时候也可以从数据库,系统,网络各个方面来优化。系统推到重来也不是什么问题。
7.Hibernate的一级缓存对于长Transaction的业务复杂的代码反而有好处,见上面的某些分析。
8. 采用缓存和静态页面可以消除部分性能影响,或者采用数据库特有功能,不过取消Hibernate的二级缓存,采用Spring的缓存或者自己搞缓存。
9. 文档多,容易解决问题,也是JPA标准的重要参考。


Hibernate不好的地方:
1. 多占内存,因为他需要把domain对应的configuration都load到内存里面去,多用内存是正常的,但是出现OutofMemerey肯定不是Hibernate的问题了,一般应用内存还是够的。
2. 性能问题。Hibernate或者Ibatis也好,最终都是通过反射把ResultSet变为对应的Domain Object,跟了一下Hibernate的内部代码,好像是用Method.invoke来调用get 和set方法的,用了Cglib或者动态代理方式,这个方式肯定是要比直接调用get和set方法要慢的。在JDK不断优化的今天,这个差距应该会缩小。 但是Ibatais应该也是通过这个方式来做,没有看过不太肯定。Hibernate多了一个将HQL或者Domain Object转化为SQL的过程,这个过程也会消耗一些性能,例如字符串拼接,记录Domain Object的关系等。


经过以上分析,可能Hibernate会给我带来一定的性能损失,但是我可以通过其他办法来弥补,内存就更不是问题了。但是他确实带来了比较好的地方,因此我们会继续用Hibernate。

所以说Hibernate适合做企业级应用,对于那种内存和性能要求都很高或者本来就用Ibatis的情况,其实可以选择Ibatias或者JdbcTemplate的。就性能而言,
JdbcTemplate > Ibatis < Hibernate
除了缓存的作用外只说DB操作,纯JDBC是最快的,因为那样没有任何负担,但是代码搞得很难看,你会这么选择吗?
1
4
分享到:
评论
2 楼 aaronrao 2012-08-27  
我同意你的看法,我们内部很大的系统(数据量上千万)很少用hibernate的多表关系映射的,但是经常有人说这是技术不够,OO思想没掌握到位,有点迷茫了,同事们都很习惯不用多表关系映射的,大型系统用hibernate的多表映射感觉真的蛮复杂的
1 楼 KimHo 2012-02-01  
如果是用MDD思想去搞开发的话,无疑还是首选hibernate
因为hibernate屏蔽掉了数据库关系模型,让你更加OO地思考问题
也就不用老是思考怎么从对象模型转换到关系模型了

相关推荐

    Hibernate_Tools_for_eclipse_HbmTool.rar

    如果你不能看到上图所示的Hibernate Configurations窗口,说明你没有打开这个View,选择Windows-Show View-Other,然后选择Hibernate Configurations即可打开这个窗口,窗口的位置无关紧要,你喜欢放在那里就把他...

    Hibernate选择题(含答案).doc

    Hibernate选择题(含答案).doc

    hibernate_5.1包

    它是快速提高集群式Web应用程序的性能的理想选择。 hibernate-proxool:支持Proxool连接池,性能与DBCP不相上下。 hibernate-oscache: 支持oscache的缓冲解决方案。(OSCache标记库由OpenSymphony设计,它是一...

    解决在同一项目中Hibernate与Mybatis共存的问题的解决方案.docx

    框架本身没有对错一说,只有适合和更适合项目的选择。任何框架都有自身的能力范围,就拿Hibernate和Mybatis这两个ORM框架来说。 Hibernate封装了很多有用的API给开发者,降低了操作数据库的难度和复杂度,同时也减少...

    ibatis和hibernate的简单介绍

    ibatis与hibernate区别,之中包括,现在企业为什么选择ibatis而放弃hibernate的选择,所有这里吧自由选择及。

    hibernate配置文件工具

    4.可以选择表,hibernate 主键策略; 5.可以设置生成的 javaBean 的 package 路径; 6.可选择生成的文件保存路径; 7.数据库服务器信息可保存,编辑,删除; 8.支持数据库 mysql5,oracle10g,mssql200,mssql2005...

    hibernate与mybatis该如何选择

    NULL 博文链接:https://liufeng757.iteye.com/blog/1974393

    深入浅出Hibernate源码

    菜单window -&gt; preference -&gt; Java -&gt; Build Path -&gt; User Librarys,分别建立名为Hibernate2,hibernate3,mysql-jdbc的用户库,分别包含对应的lib文件(如hibernate2包含hibernate-2.1目录下的hibernate2.jar及其lib...

    Hibernate中文API大全

    你必须作出一个选择,要么在组合元素中使用不能为空的属性,要么选择使用,,&lt;bag&gt; 或者 而不是 。 组合元素有个特别的用法是它可以包含一个元素。类似这样的映射允许你将一个many-to-many关联表映射为组合元素的...

    hibernate乐观锁和悲观锁学习

    ... 1 . 首先为 TUser 的 class 描述符添加 optimistic-lock 属性: &lt;hibernate-mapping&gt; &lt;class name="org.hibernate.sample....因此,一般情况下,我们都选择 version 方式作为 Hibernate 乐观锁实现机制。 .....

    myeclipse开发hibernate最新版

    myeclipse开发hibernate最新版,使用插件自动生成的,我希望能给大家,带来很大的帮助,我希望大家不要依赖只是了解一下好吗?开发的话还是要练得。

    Hibernate中文参考手册

    此书为学习hibernate框架的权威文档,无论是初学者还是想学精通持久层框架的你来说都是不错的选择

    hibernate+spring复习大纲

    hibernate+spring的复习大纲,重点中的重点,包括选择题,填空题及常见题

    Hibernate中文API

    所有的持久化类(persistent classes)都要求有无参的构造器,因为Hibernate必须使用Java反射机制来为你创建对象。构造器(constructor)的访问级别可以是private,然而当生成运行时代理(runtime proxy)的时候则...

    Hibernate查询语句大全PPT精选

    学习Hibernate 的HQL语句的不错选择,

    Hibernate开发租房系统终极版(可运行-附数据库脚本)

    打开MyEclipse Window ShowView Other 搜索输DB 点击DB Browser 在弹出的DB Browser小框处空白处右键新建 New Driver Template选择Oracle Thin Driver DriverName 我的是MyOracle URL里把@&lt;server&gt;[:&lt;1521...

    Hibernate实战(第2版 中文高清版)

     1.4.3 为什么选择ORM   1.4.4 Hibernate、EJB 3和JPA简介   1.5 小结   第2章 启动项目   2.1 启动Hibernate项目   2.1.1 选择开发过程   2.1.2 建立项目   2.1.3 Hibernate配置和启动   2.1.4 ...

    hibernate 3中的缓存小结

    2.3.2. 什么样的数据适合存放到第二级缓存中? 1 很少被修改的数据 2 不是很重要的数据,允许出现偶尔并发的数据 3 不会被并发访问的数据 4 参考数据,指的是供应用参考的常量数据,它的实例数目有限,它的实例会被...

    Hibernate数据检索(HQL)笔记

    魔乐科技,李兴华老师的Hibernate教程笔记,对Hibernate的基础知识进行了比较详细的讲解,对初学者有一个比较笼统的介绍,是带我们入门Hibernate的不二选择。

    SpringSide的Hibernate封装

    SpringSide对Hibernate做了三层封装: 第一层:HibernateGenericDao,基于spring的HibernateDaoSupport,但加入了分页函数与各种Finder函数,并使用泛型避免了返回值强制类型转换。 第二层:HibernateEntityDao,...

Global site tag (gtag.js) - Google Analytics