java

位置:IT落伍者 >> java >> 浏览文章

Hibernate--基础配置


发布日期:2021年08月22日
 
Hibernate--基础配置
Hibernate配置文件可以有两种格式一种是hibernateproperties另一种是hibernatecfgxml后者稍微方便一些当增加hbm映射文件的时候可以直接在hibernatecfgxml里面增加不必像hibernateproperties必须在初始化代码中加入

但不管怎么说两种的配置项都是一样的下面详细介绍

在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=的时候性能会提升倍之多

上一篇:Spring VS. HiveMind 优点缺点大比拼

下一篇:学习Jakarta Struts 1.1 (二)