Hibernate4实战 之 第二部分:Hibernate的基本配置
可编程的配置方式-1
如果在配置cfg.xml的时候,不想在里面配置hbm.xml怎么办呢?可在程序里使用可编程的配置方式,也就是使用程序来指定在cfg.xml里面的配置信息,不推荐这种方式。如下:
Configuration cfg = new Configuration()
.addResource("Item.hbm.xml")
.addResource("Bid.hbm.xml");
一个替代方法(有时是更好选择)是,指定被映射的类,让Hibernate帮你寻找映射定义文件:
Configuration cfg = new Configuration()
.addClass(org.hibernate.auction.Item.class)
.addClass(org.hibernate.auction.Bid.class);
这种方式消除了任何对文件名的硬编码
可编程的配置方式-2
还可以通过编程的方式来指定配置属性:
Configuration cfg = new Configuration()
.addClass(org.hibernate.auction.Item.class)
.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLInnoDBDialect")
.setProperty("hibernate.connection.datasource", "java:comp/env/jdbc/test")
.setProperty("hibernate.order_updates", "true");
其他可以传入配置属性的方式:
1:properties文件
2:xml文件
3:设置Java的系统属性,形如:java –Dproperty=value
另外要注意一点:
org.hibernate.cfg.Configuration 实例被设计成启动期间(startup-time)对象,一旦SessionFactory 创建完成它就被丢弃了。
与数据库连接的配置有两种方法,一种是JDBC,一种是DataSource
JDBC的配置
![](http://sishuok.com/forum/upload/2012/2/21/c7b4a79cc0e14038212cc6d54ba26252__%E5%9B%BE%E7%89%871.png)
示例:
<property ame="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
<property name="connection.username">javass</property>
<property name="connection.password">javass</property>
数据源的配置 ![](http://sishuok.com/forum/upload/2012/2/21/82ff769f26d57dcbda4fb50b05b01663__%E5%9B%BE%E7%89%872.png)
![](http://sishuok.com/forum/upload/2012/2/21/82ff769f26d57dcbda4fb50b05b01663__%E5%9B%BE%E7%89%872.png)
示例如下:
<property name="connection.datasource">java:/javassDs</property>
连接池c3p0的配置
由于Hibernate自己实现的连接池不太好,在项目中,建议使用工业级的连接池,比如:c3p0,Hibernate发行包中带有c3p0,下面就是其基本配置示例:
<property name= "connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name= "connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
<property name= "connection.username">javass</property>
<property name= "connection.password">javass</property>
<property name= "c3p0.min_size">5</property>
<property name= "c3p0.max_size">20</property>
<property name= "c3p0.timeout">180</property>
<property name= "c3p0.max_statements">50</property>
![](http://sishuok.com/forum/upload/2012/2/21/2493edb6b1e1ad1442e65117ceb74f81__%E5%9B%BE%E7%89%873.png)
连接池c3p0的配置
由于Hibernate自己实现的连接池不太好,在项目中,建议使用工业级的连接池,比如:c3p0,Hibernate发行包中带有c3p0,下面就是其基本配置示例:
<property name= "connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name= "connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
<property name= "connection.username">javass</property>
<property name= "connection.password">javass</property>
<property name= "c3p0.min_size">5</property>
<property name= "c3p0.max_size">20</property>
<property name= "c3p0.timeout">180</property>
<property name= "c3p0.max_statements">50</property>
![](http://sishuok.com/forum/upload/2012/2/21/46c0741cfed78c032919bc210f5db3aa__%E5%9B%BE%E7%89%874.png)
为了解决数据库中元素命名冲突的问题,引入catalog和schema来解决。
从概念上说,一个数据库系统包含多个Catalog,每个 Catalog又包含多个
Schema,而每个Schema又包含多个数据库对象(表、视图、字段等)。
n比较简单而常用的实现方式是使用数据库名作为Catalog名,使用用户名作为Schema名,各种数据库系统对Catalog和Schema的支持具体可参见下表: ![](http://sishuok.com/forum/upload/2012/2/21/39555961809ac95f4cdb8333f93019bd__%E5%9B%BE%E7%89%876.png)
![](http://sishuok.com/forum/upload/2012/2/21/39555961809ac95f4cdb8333f93019bd__%E5%9B%BE%E7%89%876.png)
![](http://sishuok.com/forum/upload/2012/2/21/0a3bb70780dc4c23d28313a8dfa1eb61__%E5%9B%BE%E7%89%877.png)
![](http://sishuok.com/forum/upload/2012/2/21/72ed157999096e8952db3d9a5055c8c8__%E5%9B%BE%E7%89%878.png)
![](http://sishuok.com/forum/upload/2012/2/21/3ddb0743e0ba0f205df51fd3537b19f3__%E5%9B%BE%E7%89%879.png)
![](http://sishuok.com/forum/upload/2012/2/21/78f61d18bbbd7bfef32324b903fb6103__%E5%9B%BE%E7%89%8710.png)
![](http://sishuok.com/forum/upload/2012/2/21/e33b772f4ff9fb13c8338e5aa2a59af8__%E5%9B%BE%E7%89%8711.png)
![](http://sishuok.com/forum/upload/2012/2/21/b3da27578d6c1f3f33f5ee54cd3222fa__%E5%9B%BE%E7%89%8712.png)
![](http://sishuok.com/forum/upload/2012/2/21/d0ca5e6c66ad2a3eeb1c9c760114bdfd__%E5%9B%BE%E7%89%8713.png)
![](http://sishuok.com/forum/upload/2012/2/21/995010cd38f00df0c71a25c72ccbc390__%E5%9B%BE%E7%89%8715.png)
为了让应用在JDBC事务和JTA事务环境中可以移植,建议使用可选的Hibernate Transaction API, 它包装并隐藏了底层系统
通过设置Hibernate配置属性hibernate.transaction.factory_class来指定 一个Transaction实例的工厂类
有三个标准(内建)的选择:
1:委托给数据库(JDBC)事务(默认)
Hibernate4以前:org.hibernate.transaction.JDBCTransactionFactory
Hibernate4里面:org.hibernate.engine.transaction.internal.jdbc.JDBCTransactionFactory
2:JTA事务,如果在上下文环境中存在运行着的事务(如, EJB会话Bean的方法), 则委托给容器管 理的事务, 否则,将启动一个新的事务,并使用Bean管理的事务.
Hibernate4以前: org.hibernate.transaction.JTATransactionFactory
Hibernate4里面: org.hibernate.engine.transaction.internal.jta.JTATransactionFactory
3:委托给容器管理的JTA事务
Hibernate4以前: org.hibernate.transaction.CMTTransactionFactory
Hibernate4
里面:org.hibernate.engine.transaction.internal.jta.CMTTransactionFactory
也可以定义属于你自己的事务策略 (如, 针对CORBA的事务服务)
![](http://sishuok.com/forum/upload/2012/2/21/f8c2a1c6e921de45519a32f06f715bf1__%E5%9B%BE%E7%89%8716.png)
![](http://sishuok.com/forum/upload/2012/2/21/ccd76284e4e7c24c12de63bf72587bc7__%E5%9B%BE%E7%89%8717.png)
![](http://sishuok.com/forum/upload/2012/2/21/9e234eb2097ab2c9521f1d21476cac1b__%E5%9B%BE%E7%89%8718.png)
![](http://sishuok.com/forum/upload/2012/2/21/5101160bc7bd92fced84566d6f42c1dd__%E5%9B%BE%E7%89%8719.png)
![](http://sishuok.com/forum/upload/2012/2/21/be94fd0bd776079f3c04ccd1aea8013a__%E5%9B%BE%E7%89%8720.png)
1:Hibernate使用SLF4J来做日志记录,可以根据你选择的绑定把日志输出到日志框架(NOP、Simple、log4j version 1.2、JDK 1.4 logging、JCL 或 logback)上。
2:需要在 classpath 里加入 slf4j-api.jar 和你选择的绑定的 JAR 文件(使用 Log4J 时加入slf4j-log4j12.jar) ,当然别忘了加入log4j自己的jar包。
![](http://sishuok.com/forum/upload/2012/2/21/2995ad6cf5f488513fb3c2ef3d65d599__%E5%9B%BE%E7%89%8721.png)
频配套PPT,视频地址【 Hibernate4实战-独家视频课程 】
http://kb.cnblogs.com/zt/jquery/
posted on 2012-07-09 22:27 zhoudong1017 阅读(119) 评论(0) 编辑 收藏 举报