•
Hibernate
配置文件主要用于配置数据库连接和
Hibernate
运行时所需的各种属性
•
每个
Hibernate
配置文件对应一个
Configuration
对象
•
Hibernate
配置文件可以有两种格式
:
–
hibernate.properties
–
hibernate.cfg.xml
这里我只介绍XML文件格式的配置文件方式
该种配置方式必须将文件名命名为hibernate.cfg.xml
且位置需放置在src目录下,否则可能会造成初始化错误
文件名和文件路径的问题处理好之后,我们可以上手开始进行配置了。
1.首先我们要进行数据库的相关信息配置,这也是数据库连接离不开的
即进行如下信息的配置
•
JDBC
连接属性
–
connection.url
:数据库
URL
–
connection.username
:数据库用户名
–
connection.password
:数据库用户密码
–
connection.driver_class
:数据库
JDBC
驱动
–
dialect
:配置数据库的方言,根据底层的数据库不同产生不同的
sql
语句,
Hibernate
会针对数据库的特性在访问时进行优化
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/*</property><!--*处为所要连接的数据库名称-->
<property name="connection.username">root</property>
<property name="connection.password">******</property>
<!-- 配置数据库方言
在MySQL里面实现分页关键字limit,只能使用MySQL里
在oracle数据库,实现发页用rownum
让hibernate框架识别不同数据库的自己特有的语句
-->
<property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
•
C3P0
数据库连接池属性
–
hibernate.c3p0.max_size:
数据库连接池的最大连接数
–
hibernate.c3p0.min_size:
数据库连接池的最小连接数
–
hibernate.c3p0.timeout:
数据库连接池中连接对象在多长时间没有使用过后,就应该被销毁
–
hibernate.c3p0.max_statements:
缓存
Statement
对象的数量
–
hibernate.c3p0.idle_test_period:
表示连接池
检测线程
多长时间检测一次池内的所有链接对象是否超时
.
连接池本身不会把自己从连接池中移除,而是专门有一个线程按照一定的时间间隔来做这件事,这个线程通过比较连接对象最后一次被使用时间和当前时间的时间差来和
timeout
做对比,进而决定是否销毁这个连接对象。
–
hibernate.c3p0.acquire_increment:
当数据库连接池中的连接耗尽时
,
同一时刻获取多少个数据库连接
2.其次则是一些当实际开发时根据需要进行的配置
–
show_sql
:是否将运行期生成的
SQL
输出到日志以供调试。取值
true| false
–
format_sql
:是否将
SQL
转化为格式良好的
SQL.
取值
true| false
–
hbm2ddl.auto
:在启动和停止时自动地创建,更新或删除数据库模式。取值
create| update | create-drop | validate
•
hibernate.jdbc.fetch_size
:实质是调用
Statement.setFetchSize
()
方法
设定
JDBC
的
Statement
读取数据的时候每次从数据库中取出的记录条数
。
–
例如一次查询
1
万条记录,对于
Oracle
的
JDBC
驱动来说,是不会
1
次性把
1
万条取出来的,而只会取出
fetchSize
条数,当结果集遍历完了这些记录以后,再去数据库取
fetchSize
条数据。因此大大节省了无谓的内存消耗。
FetchSize
设的越大,读数据库的次数越少,速度越快;
FetchSize
越小,读数据库的次数越多,速度越慢。
Oracle
数据库的
JDBC
驱动默认的
FetchSize = 10
,是一个保守的设定,根据测试,当
FetchSize=50
时,性能会提升
1
倍之多,当
f
etchSize
=100
,性能还能继续提升
20%
,
FetchSize
继续增大,性能提升的就不显著了。并不是所有的数据库都支持
FetchSize
特性,例如
MySQL
就不支持
•
hibernate.jdbc.batch_size
:
设定对数据库进行批量删除,批量更新和批量插入的时候的批次大小
,类似于设置缓冲区大小的意思。
batchSize
越大,批量操作时向数据库发送
sql
的次数越少,速度就越快。
–
测试结果是当
BatchSize=0
的时候,使用
Hibernate
对
Oracle
数据库删除
1
万条记录需要
25
秒,
BatchSize = 50
的时候,删除仅仅需要
5
秒!
Oracle
数据库
b
atchSize
=30
的时候比较合适。
例如:
<!-- 输出底层sql语句 -->
<property name="show_sql">true</property>
<!-- 输出底层sql语句格式 -->
<property name="format_sql">true</property>
<!-- hibernate帮创建表,需要配置之后
update:如果已经表存在,则更新,不存在,则创建
-->
<property name="hbm2ddl.auto">update</property>
3.进行对象映射文件(*.hbm.xml)的配置
一个核心配置文件可同时配置多个对象映射文件
需注意的是,对象映射文件若是放在src下,则可直接写文件名
<mapping resource="Customer.hbm.xml"/>
<mapping resource="Linkman.hbm.xml"/>
若是放在src下的包中,则需要写上全路径名
<mapping resource="com/hibernate/entity/Customer.hbm.xml"/>
若对象映射文件的路径和hibernate.cfg.xml文件中的配置不符合以上规范,则同样会出现初始化错误