`

为什么要选择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 配置各种数据库

    Hibernate 配置各种数据库 Hibernate 是一个基于 Java 的持久层框架,提供了一个抽象的数据访问层,能够...在 Hibernate 中配置不同的数据库需要选择合适的驱动程序、连接 URL 和方言,以便正确地连接到相应的数据库。

    Hibernate工作原理及为什么要用

    **为什么使用Hibernate:** 1. **简化JDBC代码**:Hibernate对JDBC进行了封装,开发者不再需要编写大量的SQL和结果集处理代码。 2. **ORM实现**:作为对象关系映射(ORM)工具,Hibernate将数据库操作转化为对象...

    Hibernate,hibernate笔记

    在描述中提到的`org.hibernate.PropertyValueException: not-null property references a null or transient value`是Hibernate抛出的一个常见异常,表示尝试保存一个实体时,其某个非空属性为null或未持久化。...

    Beginning Hibernate: For Hibernate 5

    #### 为什么学习 Hibernate - **简化开发**: Hibernate 大大减少了开发者处理复杂 SQL 查询的工作量,使得数据库操作更加直观。 - **提高效率**: 通过缓存机制、懒加载等技术,Hibernate 可以有效提高应用程序性能。...

    Hibernate3的依赖包

    2. **导入jar包**:将压缩包解压后,找到所有的jar文件,右键点击项目,选择“Build Path” -&gt; "Configure Build Path" -&gt; "Libraries" -&gt; "Add Jars" 或 "Add External Jars",然后浏览并添加所有必要的Hibernate3...

    Hibernate入门jar包

    - `hibernate-entitymanager.jar`:提供了JPA(Java Persistence API)的实现,使得开发者可以选择使用标准的JPA规范或者Hibernate的特定API。 - `hibernate-validator.jar`:实现了JSR-303/JSR-349 Bean ...

    Hibernate完整使用教程

    为什么选择 Hibernate Hibernate 的出现是为了解决传统的 JDBC 编程中的问题。传统的 JDBC 编程需要编写大量的代码来处理数据库交互,而 Hibernate 则提供了一种简洁的方式来访问关系数据库。 Hibernate 的主要优点...

    hibernate需要的10个jar

    在开发环境中,你可以使用此JAR进行日志记录,但在生产环境中,可能会选择更复杂、更全面的日志系统。 10. **mysql-connector-java.jar**:这个JAR是MySQL的Java驱动程序,使得Hibernate能够连接到MySQL数据库进行...

    Eclipse上使用Hibernate

    在 Eclipse 中,您可以选择 File-&gt;New-&gt;Other-&gt;Hibernate-&gt;Hibernate Mapping File,然后选择要生成实体类的表。 一旦生成了.hbm.xml 文件,您就可以使用 HibernateSynchronizer 插件来生成实体类和 DAO 类。在 ...

    hibernate与mybatis该如何选择

    在IT行业中,数据库操作是应用程序开发的核心部分,Hibernate和MyBatis是两个广泛使用的Java持久层框架,它们各自都有独特的优点和适用场景。选择合适的框架取决于项目需求、团队熟悉度以及性能考虑。以下是对这两个...

    hibernate必要的jar包

    8. **cglib-nodep.jar**或**asm.jar**:这两个库之一通常用于为没有接口的类创建代理对象,这是Hibernate动态生成代理类的一种方式。 9. **antlr.jar**:ANTLR是一个强大的解析器生成器,Hibernate使用它来解析HQL...

    kingbaseV8 hibernate jdbc 驱动

    在实际项目中,需要根据项目需求选择合适的Hibernate版本,并确保引入了正确的JDBC驱动和方言库。同时,还需要配置Hibernate的配置文件(如hibernate.cfg.xml),设置数据库连接信息,如URL、用户名、密码等,以及...

    myeclipse下hibernate用法

    首先,在工程上右键,选择 MyEclipse-&gt;Add Hibernate Capabilities,然后弹出 Hibernate 的配置窗口。在配置窗口中,我们可以选择数据库连接配置,MyEclipse 将自动填充相应的配置信息值,包括 JDBCDriver、URL、...

    hibernate的jar包

    2. **XML解析**:DOM4J支持DOM、SAX和StAX三种解析模式,可以根据需要选择合适的解析方式。 3. **元素操作**:DOM4J提供了Element类,可以方便地创建、查找、修改和删除XML元素。 4. **XPath支持**:DOM4J支持...

    Netbeans 配置 hibernate 的方法

    在 Netbeans 中,选择“工具”→“Hibernate”,然后选择“生成 Hibernate 配置文件”。Netbeans 将生成一个 hibernate.cfg.xml 文件,该文件包含了 Hibernate 的配置信息。 在项目中,使用 Hibernate ...

    hibernate5相关jar包

    它为Hibernate提供了JPA的实现,使开发者能够使用JPA的注解和API来操作数据库。 3. 数据库连接池:`hibernate-c3p0.jar` 或 `hibernate-jdbc-logging.jar`等 Hibernate需要一个数据库连接池来高效管理数据库连接。...

    hibernate-3.2源代码

    Hibernate 3.2增加了对Java Persistence API(JPA)的支持,使得开发者可以选择使用标准的JPA接口,增强了与其他JPA实现的互操作性。 通过深入学习Hibernate 3.2的源代码,开发者不仅可以了解其实现原理,还能在...

    Hibernate框架jia包

    Hibernate的配置通常在`hibernate.cfg.xml`文件中完成,包括数据库连接信息、方言选择、缓存设置等。同时,每个实体类也需要通过XML映射文件或注解来定义其与数据库表的关系。 5. **映射机制**: Hibernate通过`...

    Hibernate3.6

    Hibernate 是一个广泛使用的开源对象关系映射(ORM)框架,它为Java开发者提供了便捷的方式来处理数据库操作。在 Hibernate 3.6 版本中,这个框架继续强化了其在简化数据库访问、提高开发效率以及支持多种数据库平台...

Global site tag (gtag.js) - Google Analytics