- 浏览: 448604 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (168)
- Hibernate (17)
- MySQL (7)
- struts2 (14)
- Spring (12)
- Javascript (20)
- CSS (8)
- ajax/jquery (11)
- HttpClient (6)
- HTTP (1)
- java小知识 (23)
- Servlet/JSP (5)
- Oracle (0)
- Quartz (3)
- Lucene/Nutch (12)
- c# winform (2)
- J2ME (1)
- POI (5)
- php5 (2)
- DWR(Ajax) (1)
- log4j (1)
- dom4j (3)
- 獲取郵件聯系人 (2)
- 随意 (5)
- Heritrix (1)
- ireport+jasper (1)
- 算法 (2)
- java虚拟机 (1)
- maven (2)
最新评论
-
janrick:
太感谢了,我正需要加密的函数呢
java中DES加密解密例子 -
xuganggogo:
suyang119 写道请教一下,补充的三级的可以用吗?当然可 ...
关于条件查询detachedCriteria的注意的地方 -
suyang119:
请教一下,补充的三级的可以用吗?
关于条件查询detachedCriteria的注意的地方 -
xuganggogo:
大江帅 写道var name="attriName& ...
有关在JavaScript中使用EL表达式的问题 -
大江帅:
var name="attriName"; ...
有关在JavaScript中使用EL表达式的问题
对于某些数据库,例如Oracle来说,没有boolean数据类型,就是采用1代表true,0代表false,因此使用这个配置在Hibernate里面直接用true/false会非常直观。
hibernate.dialect net.sf.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class com.mysql.jdbc.Driver
hibernate.connection.url jdbc:mysql:///test
hibernate.connection.username root
hibernate.connection.password
这是一个连接MySQL数据库的例子,很直观,不必解释,不同的数据库的连接参数模板中全部给出了。
如果你不是在App Server环境中使用Hibernate,例如远程客户端程序,但是你又想用App Server的数据库连接池,那么你还需要配置JNDI的参数,例如Hibernate连接远程Weblogic上的数据库连接池:
hibernate.dialect net.sf.hibernate.dialect.MySQLDialect
hibernate.connection.datasource mypool
hibernate.connection.provider_class net.sf.hibernate.connection.DatasourceConnectionProvider
hibernate.jndi.class weblogic.jndi.WLInitialContextFactory
hibernate.jndi.url t3://servername:7001/
最后,如果你需要在EJB或者JTA中使用Hibernate,需要取消下行的注释:
hibernate.transaction.factory_class net.sf.hibernate.transaction.JTATransactionFactory
杂项配置:
hibernate.show_sql false
是否将Hibernate发送给数据库的sql显示出来,这是一个非常非常有用处的功能。当你在调试Hibernate的时候,让Hibernate打印sql语句,可以帮助你迅速解决问题。
#hibernate.connection.isolation 4
指定数据库的隔离级别,往往不同的数据库有自己定义的隔离级别,未必是Hibernate的设置所能更改的,所以也不必去管它了。
hibernate.jdbc.fetch_size 50
hibernate.jdbc.batch_size 25
这两个选项非常非常非常重要!!!将严重影响Hibernate的CRUD性能!
C = create, R = read, U = update, D = delete
Fetch Size 是设定JDBC的Statement读取数据的时候每次从数据库中取出的记录条数。
例如一次查询1万条记录,对于Oracle的JDBC驱动来说,是不会1次性把1万条取出来的,而只会取出Fetch Size条数,当纪录集遍历完了这些记录以后,再去数据库取Fetch Size条数据。
因此大大节省了无谓的内存消耗。当然Fetch Size设的越大,读数据库的次数越少,速度越快;Fetch Size越小,读数据库的次数越多,速度越慢。
这有点像平时我们写程序写硬盘文件一样,设立一个Buffer,每次写入Buffer,等Buffer满了以后,一次写入硬盘,道理相同。
Oracle数据库的JDBC驱动默认的Fetch Size=10,是一个非常保守的设定,根据我的测试,当Fetch
Size=50的时候,性能会提升1倍之多,当Fetch Size=100,性能还能继续提升20%,Fetch
Size继续增大,性能提升的就不显著了。
因此我建议使用Oracle的一定要将Fetch Size设到50。
不过并不是所有的数据库都支持Fetch Size特性,例如MySQL就不支持。
MySQL就像我上面说的那种最坏的情况,他总是一下就把1万条记录完全取出来,内存消耗会非常非常惊人!这个情况就没有什么好办法了
Batch Size是设定对数据库进行批量删除,批量更新和批量插入的时候的批次大小,有点相当于设置Buffer缓冲区大小的意思。
Batch Size越大,批量操作的向数据库发送sql的次数越少,速度就越快。我做的一个测试结果是当Batch
Size=0的时候,使用Hibernate对Oracle数据库删除1万条记录需要25秒,Batch Size =
50的时候,删除仅仅需要5秒!!!
可见有多么大的性能提升!很多人做Hibernate和JDBC的插入性能测试会奇怪的发现Hibernate速度至少是JDBC的两倍,就是因为Hibernate使用了Batch Insert,而他们写的JDBC没有使用Batch的缘故。
以我的经验来看,Oracle数据库 Batch Size = 30 的时候比较合适,50也不错,性能会继续提升,50以上,性能提升的非常微弱,反而消耗内存更加多,就没有必要了。
#hibernate.jdbc.use_scrollable_resultset true
设定是否可以使用JDBC2.0规范的可滚动结果集,这对Hibernate的分页显示有一定的作用,默认就好了。
#hibernate.cglib.use_reflection_optimizer false
默认打开,启用cglib反射优化。cglib是用来在Hibernate中动态生成PO字节码的,打开优化可以加快字节码构造的速度。
不过,当你在调试程序过程中,特别是和proxy,lazy loading相关的应用中,代码出错,但是出错提示信息有语焉不详,那么你可以把cglib优化关掉,这样Hibernate会输出比较详细的调试信息,帮助你debug。
评论
hibernate属性详解(转帖)<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<!-- 以下配置都是使用 jdbc.properties 属性文件中的配置,而之所以可以这样写,就是因为有 属性占位符配置的原因 -->
<property name="driverClass" value="${jdbc.driverClassName}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<!-- 连接池维持的最小的连接个数 -->
<property name="minPoolSize" value="5"/>
<!-- 连接池维持的最大的连接个数 -->
<property name="maxPoolSize" value="20"/>
<!-- 最大空闲时间, 当某个连接在这个时间内没活动后将从池中移除,前提是池中至少多于最少的连接数: minPoolSize -->
<property name="maxIdleTime" value="1800"/>
<!-- 为加强准备语句的执行性能,此参数指定被缓存的 PreparedStatement 的个数 -->
<property name="maxStatements" value="50"/>
</bean>
Hibernate 会话厂 SessionFactory
Session 就是用于每次与数据库会话的,因此需要:
数据库的配置参数,这些参数就是 上面的数据源指定的! 因此我们只需引用即可: ref="dataSource";
实体映射配置 hibernate.cfg.xml 配置
结果缓存配置(这里使用的是开源的 ehcache)
<!-- Hibernate SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!-- 引用前面定义的数据源 -->
<property name="dataSource" ref="dataSource"/>
<!-- 所有实体映射文件列表, 所有的 hbm.xml 文件 -->
<property name="mappingResources">
<list>
<value>org/springframework/samples/jpetstore/domain/Account.hbm.xml</value>
<value>org/springframework/samples/jpetstore/domain/Banner.hbm.xml</value>
<value>org/springframework/samples/jpetstore/domain/Category.hbm.xml</value>
<value>org/springframework/samples/jpetstore/domain/Inventory.hbm.xml</value>
<value>org/springframework/samples/jpetstore/domain/Item.hbm.xml</value>
<value>org/springframework/samples/jpetstore/domain/LineItem.hbm.xml</value>
<value>org/springframework/samples/jpetstore/domain/Order.hbm.xml</value>
<value>org/springframework/samples/jpetstore/domain/Product.hbm.xml</value>
<value>org/springframework/samples/jpetstore/domain/Supplier.hbm.xml</value>
</list>
</property>
<!-- 传统上的 hibernate.cfg.xml 文件的参数放在这里 -->
<property name="hibernateProperties">
<props>
<!-- 指定数据库方言 -->
<prop key="hibernate.dialect">${hibernate.dialect}
</prop>
<!-- 是否在日志中输出所有Hibernate与数据库交互的SQL语句 -->
<prop key="hibernate.show_sql">true</prop>
<!-- 是否在日志中输出的SQL 语句格式化成易读形式 -->
<prop key="hibernate.format_sql">true</prop>
<!-- 是否显示统计形式,一般在测试阶段使用 -->
<prop key="hibernate.generate_statistics">true</prop>
<!-- 对于级联查询,一次性获取的级联深度, @todo 需进一步研究 -->
<prop key="hibernate.max_fetch_depth">2</prop>
<!--
Fetch Size 是设定JDBC的Statement读取数据的时候每次从数据库中取出的记录条数,一般设置为30、50、100。
Oracle数据库的JDBC驱动默认的Fetch Size=15,设置Fetch Size设置为:30、50,性能会有明显提升,如果继续增大,
超出100,性能提升不明显,反而会消耗内存。
-->
<prop key="hibernate.jdbc.fatch_size">100</prop>
<!--
不必等到累计到50个SQL之后才执行.只要事务commit后,不管缓存中有多少条sql语句都要执行.
hibernate.jdbc.batch_size参数只是设定一次最多可以提交多少sql语句的上限,提高sql语句的执行效率
-->
<prop key="hibernate.jdbc.batch_size">50</prop>
<!--
(1)create 在每次SesstionFactory 构建时(一般是应用重启时,或者伴随着应用服务器重启时),先将之前数据库中的所有数据全
部清空,后紧跟着根据所有的hbm.xml 映射文件重新创建新的数据库表
(2)create-drop 除了create 的所有含义之外,在每次应用的退出前,将进行一次数据空清空。因此这个配置将有两次清空操作,
一次是退出,一次是启动时。
(3)update
如果在开发阶段理发了实体对象的映射文件(hbm.xml) 的定义后,此配置将后台的数据库表进行更新(如增加表的列)
(4)validate
用于校验现有的表与现有的配置是否一致。
-->
<prop key="hibernate.hbm2ddl.auto">update</prop>
<!-- 见下面的解释 -->
<prop key="hibernate.hbm2ddl.auto">update</prop>
<!--结果缓存配置:- 将ehcache.xml 置于 classpath 中- 如果不设置“查询缓存”,
那么hibernate只会缓存使用load()方法获得的单个持久化对象,如果想缓存使用findall()、 list()、
Iterator()、createCriteria()、createQuery()等方法获得的数据结果集的话,就需要设置
hibernate.cache.use_query_cache true 才行- 在Hbm文件中添加<cache usage="read-only"/>-
如果需要“查询缓存”,还需要在使用Query或Criteria()时设置其setCacheable(true);属性-->
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
</props>
</property>
<!-- 为解决 merge()方法语义的歧义 @todo 以后进一步解析或者你可以看一下相应的文档 -->
<property name="eventListeners">
<map><entry key="merge">
<bean class="org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener"/>
</entry></map>
</property>
</bean>
发表评论
-
hibernate SQLQuery实践指南
2012-11-23 02:22 0http://fengqiaa.blog.163.com/bl ... -
Hibernate DTD <column>元素语法
2012-11-05 14:36 1084记录一下<column>元素的所有属性和用法 ... -
Hibernate DTD <column>元素语法
2012-11-05 14:36 0记录一下<column>元素的所有属性和用法 ... -
spring+hibernate,数据库插入图片
2010-05-10 16:26 1233主要就三個地方需要配置: <一>hbm中, & ... -
Hibernate3.2 核心包作用
2010-03-30 11:00 1115http://blog.csdn.net/liuwyong11 ... -
Sprint2.0 的findByCriteria() 会执行update
2010-02-08 18:31 619今天发现Hibernate的findByCriteria()方 ... -
hibernate疑惑
2009-11-03 11:53 1032hibernate学得不很深入,用hibernate用得越久疑 ... -
hibernate操作数据库 插入修改数据库默认值 dynamic-insert dynamic-update
2009-11-02 16:42 2068今天碰到类似的问题,文章转自http://hi.baidu.c ... -
hibernate Restrictions用法
2009-08-04 17:04 40123方法 说明 Restric ... -
hibernate的一对一(唯一外键关联)
2009-07-17 18:14 1926一:hibernate一对一唯一外键关联映射(单向关联Pe ... -
Hibernate 更灵活的用法 HibernateCallback
2009-06-16 12:54 2671在项目中用Hibernate的Deta ... -
DetachedCriteria查詢
2009-05-26 18:16 15591,最簡單簡單的查詢,分页: public List< ... -
关于条件查询detachedCriteria的注意的地方
2009-05-26 16:38 1596http://lingoosoft.blog.ccidnet. ... -
hibernate的各种保存方式的区别(saveOrUpdateCopy,merge和update…
2009-05-26 16:35 1746全文轉自:http://www.blogj ... -
one to many
2009-05-22 15:01 981one to many <!-- 類型包括的項目:類型 ... -
Hibernate乐观锁实现——Version
2009-05-07 12:13 6047乐观并发控制,可以有三种方式。 1,Version版本号 ... -
应用Hibernate3的DetachedCriteria实现分页查询
2009-05-04 11:33 1427http://www.iteye.com/topic/1465 ... -
hibernate分页
2009-05-04 10:33 1579Hibernate 可以实现分页查询,例如: 从第 ... -
Hibernate 支持三种继承映射策略
2009-02-01 16:12 17681,subclass 元素映射子类:用一张表存储整个继承树的 ...
相关推荐
### Hibernate配置参数详解 #### 一、数据库连接配置 在Hibernate框架中,为了与数据库进行交互,必须正确地配置数据库连接参数。以下是一些关键的配置项及其含义: 1. **`hibernate.connection.driver_class`**:...
### Hibernate 连接池配置详解 #### 一、概述 在使用Hibernate进行数据库操作时,合理配置连接池是非常重要的一步。连接池可以帮助我们更高效地管理数据库连接资源,避免频繁创建与销毁数据库连接带来的性能开销。...
在配置Struts2、Spring和Hibernate时,我们需要对每个框架的配置文件进行详细设置,以便它们能协同工作。以下是对这些配置文件的详细解析: 1. Struts2配置文件(struts.xml) Struts2的核心配置文件定义了Action...
配置数据源信息,包括数据库连接池,这通常是通过Spring的DataSource bean来实现的。这样,Spring可以根据配置信息自动创建和管理数据库连接。 8. **去掉Create sessionfactory class勾选**: 在MyEclipse的向导...
总之,Hibernate 4 的基本配置包括了XML配置文件、编程式配置、数据库连接方式(JDBC或DataSource)、连接池配置以及事务管理。理解并熟练掌握这些配置方法对于高效使用 Hibernate 进行数据库操作至关重要。
### hibernate.properties详解 在Java开发环境中,Hibernate作为一款优秀的对象关系映射(ORM)框架,简化了数据库操作。为了使Hibernate能够正确地与数据库进行交互,必须通过配置文件来指定连接信息及运行时参数...
### Hibernate配置参数详解 #### 一、数据库连接配置(JDBC) 在Hibernate中,与数据库交互的第一步就是正确地配置数据库连接。以下是一些关键的配置参数及其含义: 1. **`hibernate.connection.driver_class`**...
### Hibernate配置文件详解 #### Hibernate概述 Hibernate是一个开源的对象关系映射(ORM)框架,它为Java应用程序提供了简化的方式去处理数据库操作。通过使用Hibernate,开发者可以将Java对象映射到数据库表,并...
这通常涉及到`dataSource`或`jpaVendorAdapter`的配置。 4. **查看结果**:启动应用后,P6Spy将开始记录所有通过Hibernate执行的SQL,并按照配置的方式输出。这将帮助开发者了解SQL的执行情况,找出可能的性能问题...
### Hibernate与Spring集成配置详解 #### 一、概述 在现代Java企业级应用开发中,Hibernate作为一款流行的ORM(对象关系映射)框架,能够极大简化数据库操作;而Spring作为一个全面的企业级应用开发框架,提供了...
- 接下来,我们需要添加 Hibernate 支持,选择 Spring 配置文件来生成 Hibernate 配置。在这个过程中,IDE 会自动生成 `SessionFactory` 的配置,我们需要为其指定一个唯一的名称。 4. **配置 DataSource**: - ...
### Hibernate配置数据源详解 #### 一、引言 在软件开发过程中,特别是涉及大量数据库交互的应用场景下,选择合适的数据源配置对于提高系统性能、稳定性具有重要意义。Hibernate作为Java领域内广泛使用的对象关系...
Spring Boot + Jpa(Hibernate) 架构基本配置详解 以下是 Spring Boot + Jpa(Hibernate) 架构基本配置详解的知识点总结: Spring Boot 简介 Spring Boot 是一个基于 Spring 框架的框架,它提供了一种快速构建生产...
### Hibernate常用配置详解 #### 一、概述 Hibernate 是一款开放源代码的 ORM(对象关系映射)框架,它对 JDBC 进行了轻量级的封装,使得 Java 开发人员可以使用面向对象的方式来操作数据库。本文将详细介绍 ...
- 配置Hibernate与Spring的集成,选择Existing Spring configuration file,指定SessionFactory ID为`sessionFactory`,数据源Bean ID为`dataSource`。 - 设置DB Driver为已配置的数据源,让Hibernate与Spring共享...
### Hibernate 数据源配置详解 #### 一、概述 在Java企业级应用开发中,数据库连接管理是一项基础且关键的工作。为了提高效率并确保资源的有效利用,通常会采用数据源(DataSource)来统一管理数据库连接。...
在本文中,我们将深入探讨BoneCP的核心特性、配置方法以及如何与Hibernate框架进行集成。 首先,我们来看一下BoneCP为何能实现如此高的性能。其主要得益于以下几点: 1. **资源复用**:BoneCP采用预分配和复用的...
《Hibernate2与Hibernate3连接池配置详解》 在Java的持久层框架中,Hibernate是一个广泛使用的ORM(对象关系映射)工具,它允许开发者将数据库操作转化为对Java对象的操作,极大地提高了开发效率。然而,为了优化...
在Java开发领域,Spring和Hibernate是两个非常...在Spring的配置文件(通常是`applicationContext.xml`)中,我们需要定义一个`SessionFactory` bean,并配置相关属性,如数据源、Hibernate的属性等。例如: ```xml ...