Hibernate配置文件可以有两种格式
一种是hibernate
properties
另一种是hibernate
cfg
xml
后者稍微方便一些
当增加hbm映射文件的时候
可以直接在hibernate
cfg
xml里面增加
不必像hibernate
properties必须在初始化代码中加入
但不管怎么说两种的配置项都是一样的下面详细介绍
在Hibernate的src目录下有一个hibernateproperties模板我们不必自己从头写修改模板就可以了:)
hibernatequerysubstitutions true false yes Y no N
这个配置意思是当你在Hibernate里面输入true的时候Hibernate会转化为插入数据库当你在Hibernate里面输入false的时候Hibernate会转化为插入数据库后面的YN同理
对于某些数据库例如Oracle来说没有boolean数据类型就是采用代表true代表false因此使用这个配置在Hibernate里面直接用true/false会非常直观
hibernatedialect netsf
hibernatedialectMySQLDialect
nnectiondriver_class commysqljdbcDriver
nnectionurl jdbc:mysql:///nnectionusername root
nnectionpassword
这是一个连接MySQL数据库的例子很直观不必解释不同的数据库的连接参数模板中全部给出了
nnectionpool_size
hibernatestatement_cachesize
这是Hibernate自带的连接池的配置参数在默认情况下将采用意义很直观不多解释
只是提醒一点Hibernate这个连接池是非常原始非常简单的连接池如果你在项目中用Hibernate的话建议你首选App Server的连接池次选Hibernate带的DBCP连接池自带的连接池应该做为末选
如果你采用DBCP连接池除了要配置DBCP连接池以外还需要取消掉下行的注释
nnectionprovider_class nnectionDBCPConnectionProvider
其它的连接池同理
如果采用App Server的连接池假设App Server连接池的DataSource的JNDI名称为mypool的话配置应该如下
hibernatedialect netsf
hibernatedialectMySQLDialec
nnectiondatasource nnectionprovider_class nnectionDatasourceConnectionProvider
其它参数就不必写了因为已经在App Server配置连接池的时候指定好了
如果你不是在App Server环境中使用Hibernate例如远程客户端程序但是你又想用App Server的数据库连接池那么你还需要配置JNDI的参数例如Hibernate连接远程Weblogic上的数据库连接池
hibernatedialect netsfhibernatedialectMySQLDialect
nnectiondatasource mypool
nnectionprovider_class netsf
nnectionDatasourceConnectionProviderhibernatejndiclass weblogicjndiWLInitialContextFactory
hibernatejndiurl t://servername:/
最后如果你需要在EJB或者JTA中使用Hibernate需要取消下行的注释
hibernatetransactionfactory_class netsfhibernatetransactionJTATransactionFactory
杂项配置
hibernateshow_sql false
是否将Hibernate发送给数据库的sql显示出来这是一个非常非常有用处的功能当你在调试Hibernate的时候让Hibernate打印sql语句可以帮助你迅速解决问题
#nnectionisolation
指定数据库的隔离级别往往不同的数据库有自己定义的隔离级别未必是Hibernate的设置所能更改的所以也不必去管它了
hibernatejdbcfetch_size hibernatejdbcbatch_size
这两个选项非常非常非常重要!!!将严重影响Hibernate的CRUD性能!
C = create R = read U = update D = delete
Fetch Size 是设定JDBC的Statement读取数据的时候每次从数据库中取出的记录条数
例如一次查询万条记录对于Oracle的JDBC驱动来说是不会次性把万条取出来的而只会取出Fetch Size条数当纪录集遍历完了这些记录以后再去数据库取Fetch Size条数据
因此大大节省了无谓的内存消耗当然Fetch Size设的越大读数据库的次数越少速度越快Fetch Size越小读数据库的次数越多速度越慢
这有点像平时我们写程序写硬盘文件一样设立一个Buffer每次写入Buffer等Buffer满了以后一次写入硬盘道理相同
Oracle数据库的JDBC驱动默认的Fetch Size=是一个非常保守的设定根据我的测试当Fetch Size=的时候性能会提升倍之多