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是最快的,因为那样没有任何负担,但是代码搞得很难看,你会这么选择吗?
分享到:
相关推荐
Hibernate 配置各种数据库 Hibernate 是一个基于 Java 的持久层框架,提供了一个抽象的数据访问层,能够...在 Hibernate 中配置不同的数据库需要选择合适的驱动程序、连接 URL 和方言,以便正确地连接到相应的数据库。
**为什么使用Hibernate:** 1. **简化JDBC代码**:Hibernate对JDBC进行了封装,开发者不再需要编写大量的SQL和结果集处理代码。 2. **ORM实现**:作为对象关系映射(ORM)工具,Hibernate将数据库操作转化为对象...
在描述中提到的`org.hibernate.PropertyValueException: not-null property references a null or transient value`是Hibernate抛出的一个常见异常,表示尝试保存一个实体时,其某个非空属性为null或未持久化。...
#### 为什么学习 Hibernate - **简化开发**: Hibernate 大大减少了开发者处理复杂 SQL 查询的工作量,使得数据库操作更加直观。 - **提高效率**: 通过缓存机制、懒加载等技术,Hibernate 可以有效提高应用程序性能。...
2. **导入jar包**:将压缩包解压后,找到所有的jar文件,右键点击项目,选择“Build Path” -> "Configure Build Path" -> "Libraries" -> "Add Jars" 或 "Add External Jars",然后浏览并添加所有必要的Hibernate3...
- `hibernate-entitymanager.jar`:提供了JPA(Java Persistence API)的实现,使得开发者可以选择使用标准的JPA规范或者Hibernate的特定API。 - `hibernate-validator.jar`:实现了JSR-303/JSR-349 Bean ...
为什么选择 Hibernate Hibernate 的出现是为了解决传统的 JDBC 编程中的问题。传统的 JDBC 编程需要编写大量的代码来处理数据库交互,而 Hibernate 则提供了一种简洁的方式来访问关系数据库。 Hibernate 的主要优点...
在开发环境中,你可以使用此JAR进行日志记录,但在生产环境中,可能会选择更复杂、更全面的日志系统。 10. **mysql-connector-java.jar**:这个JAR是MySQL的Java驱动程序,使得Hibernate能够连接到MySQL数据库进行...
在 Eclipse 中,您可以选择 File->New->Other->Hibernate->Hibernate Mapping File,然后选择要生成实体类的表。 一旦生成了.hbm.xml 文件,您就可以使用 HibernateSynchronizer 插件来生成实体类和 DAO 类。在 ...
在IT行业中,数据库操作是应用程序开发的核心部分,Hibernate和MyBatis是两个广泛使用的Java持久层框架,它们各自都有独特的优点和适用场景。选择合适的框架取决于项目需求、团队熟悉度以及性能考虑。以下是对这两个...
8. **cglib-nodep.jar**或**asm.jar**:这两个库之一通常用于为没有接口的类创建代理对象,这是Hibernate动态生成代理类的一种方式。 9. **antlr.jar**:ANTLR是一个强大的解析器生成器,Hibernate使用它来解析HQL...
在实际项目中,需要根据项目需求选择合适的Hibernate版本,并确保引入了正确的JDBC驱动和方言库。同时,还需要配置Hibernate的配置文件(如hibernate.cfg.xml),设置数据库连接信息,如URL、用户名、密码等,以及...
首先,在工程上右键,选择 MyEclipse->Add Hibernate Capabilities,然后弹出 Hibernate 的配置窗口。在配置窗口中,我们可以选择数据库连接配置,MyEclipse 将自动填充相应的配置信息值,包括 JDBCDriver、URL、...
2. **XML解析**:DOM4J支持DOM、SAX和StAX三种解析模式,可以根据需要选择合适的解析方式。 3. **元素操作**:DOM4J提供了Element类,可以方便地创建、查找、修改和删除XML元素。 4. **XPath支持**:DOM4J支持...
在 Netbeans 中,选择“工具”→“Hibernate”,然后选择“生成 Hibernate 配置文件”。Netbeans 将生成一个 hibernate.cfg.xml 文件,该文件包含了 Hibernate 的配置信息。 在项目中,使用 Hibernate ...
它为Hibernate提供了JPA的实现,使开发者能够使用JPA的注解和API来操作数据库。 3. 数据库连接池:`hibernate-c3p0.jar` 或 `hibernate-jdbc-logging.jar`等 Hibernate需要一个数据库连接池来高效管理数据库连接。...
Hibernate 3.2增加了对Java Persistence API(JPA)的支持,使得开发者可以选择使用标准的JPA接口,增强了与其他JPA实现的互操作性。 通过深入学习Hibernate 3.2的源代码,开发者不仅可以了解其实现原理,还能在...
Hibernate的配置通常在`hibernate.cfg.xml`文件中完成,包括数据库连接信息、方言选择、缓存设置等。同时,每个实体类也需要通过XML映射文件或注解来定义其与数据库表的关系。 5. **映射机制**: Hibernate通过`...
Hibernate 是一个广泛使用的开源对象关系映射(ORM)框架,它为Java开发者提供了便捷的方式来处理数据库操作。在 Hibernate 3.6 版本中,这个框架继续强化了其在简化数据库访问、提高开发效率以及支持多种数据库平台...