2.7 使用MyEclipse可視化開(kāi)發(fā)Hibernate實(shí)例
2.7節(jié)的例子源代碼在配套光盤sourcecode/workspace目錄的chapter02_first項(xiàng)目中。
這個(gè)實(shí)例主要演示如何使用MyEclipse的可視化開(kāi)發(fā)工具開(kāi)發(fā)Hibernate應(yīng)用,利用MyEclipse可以提高我們開(kāi)發(fā)Java EE應(yīng)用的效率。操作的數(shù)據(jù)庫(kù)表還是guestbook表,所使用MyEclipse的版本為7.0,不同的MyEclipse版本之間對(duì)于開(kāi)發(fā)Hibernate應(yīng)用差異不大。
在7.0版本中,內(nèi)置了對(duì)Hibernate 2.x、3.0、3.1和3.2等Hibernate版本的支持,沒(méi)有提供對(duì)3.3版本的支持。我們可以修改MyEclipse的設(shè)置,把對(duì)Hibernate 3.2的支持,修改為對(duì)Hibernate 3.3的支持。為此啟動(dòng)Eclipse后,選中菜單欄的"Windows"→"Preference"→"MyEclipse Enterprise Workbench"→"Project Capabilities"→"Hibernate"→"Hibernate 3.2"選項(xiàng),在Library Modules下拉列表框中選中Hibernate 3.2 Core Libray選項(xiàng),把類庫(kù)文件替換為Hibernate 3.3的類庫(kù)文件。如圖2 2所示。
2.7.1 設(shè)置MyEclipse連接Oracle數(shù)據(jù)庫(kù)
為在MyEclipse中設(shè)置連接Oracle數(shù)據(jù)庫(kù),在Eclipse中選擇Window→Show View→Other→MyEclipse Database→DB Browser選項(xiàng)。右擊DB Browser視圖的空白部分,選擇New選項(xiàng),如圖2 3所示。
在彈出的窗口中,輸入連接Oracle數(shù)據(jù)庫(kù)所需要的相應(yīng)參數(shù),以及Oracle驅(qū)動(dòng)類庫(kù)的文件名與位置。單擊Next按鈕,如圖2 4所示。
在Schema Details窗口中,選中Display Selected單選按鈕。單擊"Add"按鈕,在彈出的Selection Needed窗口中選中SCOTT復(fù)選框。單擊"OK"按鈕,如圖2 5所示。單擊"Finish"按鈕,關(guān)閉Schema Details窗口。
2.7.2 新建項(xiàng)目并增加Hibernate開(kāi)發(fā)支持
在Eclipse中新建一個(gè)Java項(xiàng)目,名為"chapter02_first"。單擊MyEclipse→Project Capabilities→Add Hibernate Capabilites選項(xiàng),增加Hibernate的開(kāi)發(fā)支持,如圖2 6所示。
彈出Hibernate Support for MyEclipse窗口,在Hibernate Specification選項(xiàng)組中選中Hibernate 3.2單選按鈕,選擇MyEclipse Libraries和Hibernate 3.2 Core Libaries-<MyEclipse-Library>復(fù)選框選項(xiàng),如圖2 7所示,單擊Next按鈕。
其中的選項(xiàng)說(shuō)明如表2-3所示。
表2-3 選項(xiàng)說(shuō)明
選項(xiàng)
描述
Hibernate Specification
要添加到項(xiàng)目中的Hibernate具體版本,推薦選擇Hibernate 3.2
Enable Hibernate Annotations Support
是否需要Hibernate Annotations的支持
MyEclipse Libraries/User Libraries
選擇顯示哪個(gè)位置的類庫(kù)
Add checked Libraries to project build-path
選中的類庫(kù)將會(huì)添加當(dāng)前項(xiàng)目的構(gòu)建路徑中,但是相應(yīng)的Jar文件將不會(huì)復(fù)制到項(xiàng)目中,這些Jar文件會(huì)在項(xiàng)目部署時(shí)復(fù)制
Copy checked Library Jars to project folder and add to build-path
選中的類庫(kù)中的Jar文件將會(huì)被復(fù)制到項(xiàng)目并添加到構(gòu)建路徑中
Library Folder
一個(gè)相對(duì)于當(dāng)前項(xiàng)目的路徑,類庫(kù)中的Jar會(huì)被復(fù)制到其中
在接下來(lái)的窗口中輸入MyEclipse產(chǎn)生的Hibernate配置文件名及其路徑。使用hibernate.cfg.xml文件名,路徑保留默認(rèn)值,如圖2 8所示。
單擊Next按鈕,在DB Driver下拉列表框中選中已設(shè)置的oracledriver選項(xiàng),其他選項(xiàng)保留默認(rèn)值,如圖2 9所示。
單擊"Next"按鈕,清除"Create SessionFactory Class"復(fù)選框,如圖2 10所示,單擊Finish按鈕結(jié)束設(shè)置。
執(zhí)行上述操作后,MyEclipse會(huì)在項(xiàng)目的構(gòu)建路徑中增加Hibernate的相關(guān)類庫(kù)和Oracle的驅(qū)動(dòng)類庫(kù)。同時(shí)生成了開(kāi)發(fā)Hibernate應(yīng)用所需的hibernate.cfg.xml文件,整個(gè)項(xiàng)目的所有類庫(kù)文件和配置文件如圖2 11所示。
還需要修改MyEclipse自動(dòng)生成的hibernate.cfg.xml文件,增加一些新的配置項(xiàng)并修改Oracle數(shù)據(jù)庫(kù)方言類的名稱。修改后的hibernate.cfg.xml的內(nèi)容如下所示(加粗顯示部分為需要修改處)。
SRC 2 2 hibernate.cfg.xml <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name= "dialect">org.hibernate.dialect.Oracle9iDialect</property> <property name= "connection.url">jdbc:oracle:thin:@localhost:1521:ora9</property> <property name="connection.username">scott</property> <property name="connection.password">tiger</property> <property name= "connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <property name="myeclipse.connection.profile">oracledriver</property> <property name="current_session_context_class">thread</property> <property name="show_sql">true</property> <property name="format_sql">true</property> </session-factory> </hibernate-configuration>
2.7.3 自動(dòng)生成Guestbook類與映射文件
在Eclipse的DB Browser視圖中,右擊設(shè)置的oracledriver名。選擇Open connection選項(xiàng),如圖2 12所示彈出Open Database Connection窗口,輸入用戶名及密碼,如圖2 13所示,單擊OK按鈕。
右擊DB Browser視圖中的guestbook表,選中"Hibernate Reverse Engineering"選項(xiàng)。如圖2 14所示。
彈出"Hibernate Mapping and Application Generation"窗口,輸入與生成持久化類(POJO)有關(guān)的參數(shù)值。在Java src folder文本框中輸入生成持久化類的保存路徑,在Java package文本框中輸入持久化類所使用的包名。選擇"Create POJO<>DB Table mapping information、Create a Hibernate mapping file (*.hbm.xml) for each database table"及"Java Data Object (POJO<> DB Table)"復(fù)選框,清除"Create abstract class"復(fù)選框,如圖2 15所示。
單擊Next按鈕,在打開(kāi)窗口中的Id Generator下拉列表框中選中sequence選項(xiàng),其他選項(xiàng)保留默認(rèn)值,如圖2 16所示。
單擊"Next"按鈕,在打開(kāi)如圖2 17所示的窗口中單擊"Finish"按鈕。
經(jīng)過(guò)上面的操作之后,MyEclipse會(huì)自動(dòng)生成Guestbook.java和Guestbook.hbm.xml兩個(gè)文件。Guestbook.hbm.xml文件的內(nèi)容如下所示,需要修改008行~第010行的內(nèi)容用來(lái)設(shè)置序列名。
SRC 2 3 Guestbook.hbm.xml 001 <?xml version="1.0" encoding="utf-8"?> 002 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 003 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 004 <hibernate-mapping> 005 <class name="com.v512.examples.Guestbook" table="GUESTBOOK" schema="SCOTT"> 006 <id name="id" type="java.lang.Integer"> 007 <column name="ID" precision="8" scale="0" /> 008 <generator class="sequence"> 009 <param name="sequence">gb_seq</param> 010 </generator> 011</id> 012<property name="name" type="java.lang.String"> 013 <column name="NAME" length="20" not-null="true" /> 014</property> 015<property name="phone" type="java.lang.String"> 016 <column name="PHONE" length="20" /> 017</property> 018<property name="email" type="java.lang.String"> 019 <column name="EMAIL" length="40" /> 020</property> 021<property name="title" type="java.lang.String"> 022 <column name="TITLE" length="80" not-null="true" /> 023</property> 024<property name="content" type="java.lang.String"> 025 <column name="CONTENT" length="2000" /> 026</property> 027<property name="createdTime" type="java.util.Date"> 028 <column name="CREATED_TIME" not-null="true" /> 029</property> 030 </class> 031 </hibernate-mapping>
第005行中<class>標(biāo)簽的schema屬性設(shè)置當(dāng)前表屬于哪個(gè)schema,第007行和第013行中<column>標(biāo)簽的precision、scale及l(fā)ength屬性設(shè)置表中字段的精度、小數(shù)點(diǎn)位數(shù)和長(zhǎng)度,not-null屬性設(shè)置該字段是否不允許為空。
2.7.4 編寫HibernateSessionFactoryUtil.java文件
在Hibernate應(yīng)用中,如果只使用一個(gè)數(shù)據(jù)庫(kù),則通常只需要一個(gè)SessionFactory對(duì)象。為了方便整個(gè)應(yīng)用取得同一個(gè)SessionFactory對(duì)象,我們應(yīng)用設(shè)計(jì)模式中的單態(tài)模式。編寫一個(gè)SessionFactory的工具類HibernateSessionFactoryUtil,HibernateSessionFactoryUtil.java文件的內(nèi)容如下:
SRC 2 4 HibernateSessionFactoryUtil.java 001 package com.v512.util; 002 003 import org.hibernate.SessionFactory; 004 import org.hibernate.cfg.Configuration; 005 006 public class HibernateSessionFactoryUtil { 007 private static final SessionFactory sessionFactory; 008 static { 009 try { 010 sessionFactory = new Configuration().configure(). buildSessionFactory(); 011 } catch (Throwable ex) { 012 /* 013 * 需要 捕獲Throwable對(duì)象, 014 * 否則捕獲不到 Error及其子類,以及NoClassDefFoundError類型的錯(cuò)誤 015 */ 016 throw new ExceptionInInitializerError(ex); 017 } 018 } 019 020 private HibernateSessionFactoryUtil() { 021 022 } 023 024 public static SessionFactory getSessionFactory() { 025 return sessionFactory; 026 } 027 }
HibernateSessionFactoryUtil類在載入JVM后新建Configuration對(duì)象,讀取hibernate.cfg.xml文件,創(chuàng)建SessionFactory對(duì)象,通過(guò)HibernateSessionFactoryUtil類所提供的getSessionFactory()靜態(tài)方法獲取SessionFactory對(duì)象。
2.7.5 編寫HibernateTest.java
編寫一個(gè)測(cè)試的HibernateTest.java文件,通過(guò)Hibernate實(shí)現(xiàn)對(duì)guestbook表中數(shù)據(jù)的CRUD操作,在其中定義addGuestbook()、updateGuestbook()、getGuestbook()、getGuestbooks()、deleteGuestbook()和printGuestbook()方法。該文件的內(nèi)容如下:
SRC 2 5 HibernateTest.javaa 001 package com.v512.examples; 002 003 import java.util.List; 004 import org.hibernate.Query; 005 import org.hibernate.Session; 006 import org.hibernate.Transaction; 007 import com.v512.util.HibernateSessionFactoryUtil; 008 009 public class HibernateTest { 010 public void addGuestbook(Guestbook gb) { 011Session session = HibernateSessionFactoryUtil. getSessionFactory(). getCurrentSession(); 012 Transaction tx = session.beginTransaction(); 013 session.save(gb); 014 tx.commit(); 015 } 016 017 public Guestbook getGuestbook(Integer id) { 018 Session session = HibernateSessionFactoryUtil. getSessionFactory(). getCurrentSession(); 019 Transaction tx = session.beginTransaction(); 020 Guestbook gb = (Guestbook) session.get (Guestbook.class, id); 021 tx.commit(); 022 return gb; 023 } 024 025 public List<Guestbook> getGuestbooks() { 026 Session session = HibernateSessionFactoryUtil. getSessionFactory(). getCurrentSession(); 027 Transaction tx = session.beginTransaction(); 028 Query query = session.createQuery("from Guestbook"); 029 List<Guestbook> list = query.list(); 030 tx.commit(); 031 return list; 032 } 033 034 public void updateGuestbook(Guestbook gb) { 035 Session session = HibernateSessionFactoryUtil. getSessionFactory(). getCurrentSession(); 036 Transaction tx = session.beginTransaction(); 037 session.saveOrUpdate(gb); 038 tx.commit(); 039 } 040 041 public void deleteGuestbook(Integer id) { 042 Guestbook gb = getGuestbook(id); 043 Session session = HibernateSessionFactoryUtil. getSessionFactory(). getCurrentSession(); 044 Transaction tx = session.beginTransaction(); 045 session.delete(gb); 046 tx.commit(); 047 } 048 049 public void printGuestbook(Guestbook gb) { 050 System.out.print("id:" + gb.getId() + "\t"); 051 System.out.print("name:" + gb.getName() + "\t"); 052 System.out.print("title:" + gb.getTitle() + "\t"); 053 System.out.print("content:" + gb.getContent() + "\t"); 054 System.out.println("createdTime:" + gb.getCreatedTime()); 055 } 056 057 public static void main(String[] args) { 058 HibernateTest test = new HibernateTest(); 059 Guestbook gb = test.getGuestbook(new Integer(1)); 060 061 System.out.println("------------------------- 讀取單一記錄-----------------------------"); 062 test.printGuestbook(gb); 063 064 System.out.println("------------------------- 讀取所有記錄-----------------------------"); 065 List<Guestbook> list = test.getGuestbooks(); 066 for (Guestbook g : list) { 067 test.printGuestbook(g); 068 } 069 070 System.out.println("------------------------- 更新記錄---------------------------------"); 071 gb.setName("關(guān)羽"); 072 test.updateGuestbook(gb); 073 test.printGuestbook(gb); 074 075 System.out.println("------------------------- 刪除記錄---------------------------------"); 076 test.deleteGuestbook(new Integer(1)); 077 078 HibernateSessionFactoryUtil.getSessionFactory().close(); 079 } 080 }
當(dāng)使用HibernateTest類中g(shù)etGuestbook()方法根據(jù)id值獲取一條記錄時(shí),Hibernate找到數(shù)據(jù)庫(kù)中這條記錄,然后再生成這條記錄所對(duì)應(yīng)的持久化對(duì)象返回。updateGuestbook()方法更新一條記錄時(shí)首先找到這條記錄所對(duì)應(yīng)的持久化對(duì)象,然后調(diào)用這個(gè)對(duì)象的setter方法修改屬性值,并通過(guò)Hibernate完成數(shù)據(jù)庫(kù)中數(shù)據(jù)的更新;deleteGuestbook()方法刪除一條記錄時(shí)首先找到這條記錄所對(duì)應(yīng)的持久化對(duì)象,然后通過(guò)Hibernate刪除持久化對(duì)象刪除進(jìn)而數(shù)據(jù)庫(kù)中所對(duì)應(yīng)的數(shù)據(jù)。
2.7.6 程序運(yùn)行結(jié)果
這個(gè)實(shí)例使用Hibernate完成對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的CRUD操作,借助MyEclipse的幫助開(kāi)發(fā)Hibernate應(yīng)用,不需要手工編寫持久化(POJO)類、Hibernate的配置和映射文件。Hibernate通過(guò)操作持久化對(duì)象完成對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的CRUD操作, HibernateTest.java運(yùn)行結(jié)果如下:
-------------------------讀取單一記錄----------------------------- id:1 name:劉偉 title:大家好 content:歡迎大家學(xué)習(xí)Hibernate技術(shù)。 createdTime: 2009-03-12 06:17:59.0 -------------------------讀取所有記錄----------------------------- id:1 name:劉偉 title:大家好 content:歡迎大家學(xué)習(xí)Hibernate技術(shù)。 createdTime: 2009-03-12 06:17:59.0 -------------------------更新記錄--------------------------------- id:1 name:關(guān)羽 title:大家好 content:歡迎大家學(xué)習(xí)Hibernate技術(shù)。 createdTime: 2009-03-12 06:17:59.0 -------------------------刪除記錄---------------------------------
2.7.7 使用 HQL 編輯器調(diào)試HQL語(yǔ)句
MyEclipse中包含一個(gè)Hibernate編輯器和多個(gè)相關(guān)視圖,允許根據(jù)當(dāng)前項(xiàng)目的配置來(lái)調(diào)試HQL語(yǔ)句。"Hibernate Dynamic Query Translator"視圖顯示當(dāng)前HQL語(yǔ)句所對(duì)應(yīng)的SQL語(yǔ)句;"Hibernate Query Result"視圖查看HQL語(yǔ)句的執(zhí)行結(jié)果,返回的持久化對(duì)象的屬性值通過(guò)"Properties"視圖顯示;"Query Parameters"視圖可以為調(diào)試的HQL語(yǔ)句輸入需要的參數(shù)值。
右擊Package Explorer視圖中的chapter02_first項(xiàng)目,選中快捷菜單中的"MyEclipse→Open HQL Editor"選項(xiàng),如圖2 18所示。
打開(kāi)HQL編輯器,輸入"from Guestbook"。單擊運(yùn)行圖標(biāo)執(zhí)行查詢,并且通過(guò)相關(guān)視圖查看查詢結(jié)果,如圖2 19所示。
還可以使用"Query Parameters視圖輸入需要綁定參數(shù)的HQL查詢語(yǔ)句,如圖2 20所示。
2.8 Hibernate應(yīng)用的開(kāi)發(fā)方式
2.8.1 自底向上,從數(shù)據(jù)庫(kù)表到持久化類
采用自底向上的開(kāi)發(fā)方式,采用手工或者M(jìn)yEclipse等開(kāi)發(fā)工具直接根據(jù)數(shù)據(jù)庫(kù)中表的結(jié)構(gòu)生成對(duì)應(yīng)的映射文件和持久化類。這是實(shí)際開(kāi)發(fā)中最常用的一種方式,也是本書所推薦的方式。通過(guò)這種方式最小化了手工編碼,降低了出錯(cuò)的可能性。
2.8.2 自上向下,持久化類到數(shù)據(jù)庫(kù)表
首先編寫持久化類,然后根據(jù)持久化類的代碼手工編寫或者采用工具生成映射文件,進(jìn)而生成數(shù)據(jù)庫(kù)表結(jié)構(gòu)。這種方式在實(shí)際開(kāi)發(fā)中也經(jīng)常使用,可能出現(xiàn)的問(wèn)題是生成的數(shù)據(jù)庫(kù)表結(jié)構(gòu)與實(shí)際需要的數(shù)據(jù)庫(kù)表結(jié)構(gòu)之間的差異,需要手工調(diào)整。
2.8.3 從中間出發(fā),向上與向下發(fā)展
首先編寫持久化類與數(shù)據(jù)庫(kù)表的映射文件,然后根據(jù)映射文件手工編碼或者采用工具向上生成持久化類,向下生成數(shù)據(jù)庫(kù)表結(jié)構(gòu)。
2.9 設(shè)置Hibernate使用連接池
Hibernate默認(rèn)使用一個(gè)功能簡(jiǎn)單的連接池,通常只用于開(kāi)發(fā)階段測(cè)試之用。為了更高效地使用Hibernate,可以設(shè)置Hibernate使用第三方C3P0或者應(yīng)用服務(wù)器(容器)所帶的數(shù)據(jù)庫(kù)連接池。
2.9.1 設(shè)置使用Tomcat中的連接池
如果開(kāi)發(fā)運(yùn)行在應(yīng)用服務(wù)器中的程序,建議其中配置的連接池,如允許Hibernate使用通過(guò)在Tomcat中所配置的連接池。為此修改Tomcat中的context.xml文件,該文件位于tomcat安裝目錄的conf子目錄中,同時(shí)還需要將Oracle數(shù)據(jù)庫(kù)的驅(qū)動(dòng)類庫(kù)ojdbc6.jar或者ojdbc14.jar添加到tomcat的lib目錄下。修改后的context.xml文件內(nèi)容如下:
SRC 2 6 context.xml <Context reloadable="true"> <WatchedResource>WEB-INF/web.xml</WatchedResource> <Resource name="jdbc/oracleds" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10 000" username="scott" password="tiger" driverClassName="oracle.jdbc.OracleDriver" url= "jdbc:oracle:thin:@localhost:1521:ora9" /> </Context>
設(shè)置Tomcat提供的連接池之后,要在Hibernate的配置文件(hibernate.cfg.xml)中添加connection.datasource屬性,如下面的代碼所示:
<property name="connection.datasource"> java:comp/env/jdbc/oracleds</property>
其中的java:comp/env/jdbc/oracleds是Tomcat中設(shè)置的數(shù)據(jù)源對(duì)象的JNDI名稱。
2.9.2 使用C3P0連接池
如果讓Hibernate使用第三方C3P0連接池,則在Hibernate的配置文件中添加如下的配置信息,還需要把C3P0類庫(kù)添加到當(dāng)前項(xiàng)目的構(gòu)建路徑下。
<property name="connection.provider_class"> org.hibernate.connection.C3P0ConnectionProvider </property> <property name="hibernate.c3p0.min_size">5</property> <property name="hibernate.c3p0.max_size">10</property> <property name="hibernate.c3p0.max_statements">50</property> <property name="hibernate.c3p0.timeout">3600</property> <property name="hibernate.c3p0.idle_test_period">120</property> <property name="hibernate.c3p0.acquire_increment">2</property>
- hibernate.c3p0.min_size:設(shè)置連接池的最小連接數(shù)。
- hibernate.c3p0.max_siz:設(shè)置連接池的最大連接數(shù)。
- hibernate.c3p0.timeout:設(shè)置連接池中的連接的最大空閑時(shí)間,超時(shí)后會(huì)被刪除,單位為秒。
- hibernate.c3p0.max_statements:設(shè)置連接池中Statement對(duì)象的最大數(shù)量。
- hibernate.c3p0.idle_test_period:設(shè)置檢查連接池中空閑連接的間隔時(shí)間,單位為秒。
- hibernate.c3p0.acquire_increment:設(shè)置連接池的連接用完后每次新建連接的數(shù)量。
2.9.3 使用自定義連接池
在Hibernate應(yīng)用中還可以使用定義連接池,該連接池需要實(shí)現(xiàn)org.hibernate.connection.ConnectionProvider接口,并在Hibernate配置文件中設(shè)置hibernate.connection.provider_class屬性,其值為這個(gè)實(shí)現(xiàn)類的名稱。
2.10 使用C3P0連接池
2.10節(jié)的例子源代碼在配套光盤sourcecode/workspace目錄的chapter02_first項(xiàng)目中。
2.10.1 創(chuàng)建chapter02_c3p0項(xiàng)目
在這個(gè)實(shí)例中讓Hibernate使用第三方C3P0連接池獲取操作數(shù)據(jù)庫(kù)的連接對(duì)象,通過(guò)復(fù)制chapter02_first項(xiàng)目創(chuàng)建chapter02_c3p0項(xiàng)目。同時(shí)還需要把C3P0連接池的類庫(kù)(c3p0-*.*.*.jar)添加到當(dāng)前項(xiàng)目的構(gòu)建目錄下。當(dāng)前項(xiàng)目構(gòu)建路徑中的類庫(kù)如圖2 21所示。
2.10.2 編輯hibernate.cfg.xml文件
當(dāng)前項(xiàng)目使用了C3P0的連接池技術(shù),修改hibernate.cfg.xml文件以配置相應(yīng)的參數(shù),其內(nèi)容如下:
SRC 2 7 hibernate.cfg.xml <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net /hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="connection.driver_class">oracle.jdbc.driver. OracleDriver</property> <property name="connection.url">jdbc:oracle:thin:@localhost: 1521:ora9</property> <property name="dialect">org.hibernate.dialect. Oracle9iDialect</property> <property name="connection.username">scott</property> <property name="connection.password">tiger</property> <!-- C3P0 連接池的配置 --> <property name="connection.provider_class"> org.hibernate.connection.C3P0ConnectionProvider </property> <property name="hibernate.c3p0.min_size">5</property> <property name="hibernate.c3p0.max_size">10</property> <property name="hibernate.c3p0.max_statements">50</property> <property name="hibernate.c3p0.timeout">3600</property> <property name="hibernate.c3p0.idle_test_period">120</property> <property name="hibernate.c3p0.acquire_increment">2</property> <property name="current_session_context_class">thread</property> <property name="show_sql">true</property> <property name="format_sql">true</property> <mapping resource="com/v512/examples/Guestbook.hbm.xml" /> </session-factory> </hibernate-configuration>
2.10.3 chapter02_c3p0項(xiàng)目的運(yùn)行與輸出
chapter02_c3p0項(xiàng)目中,其他文件都不需要修改,運(yùn)行HibernateTest類輸出的結(jié)果chapter02_first項(xiàng)目運(yùn)行輸出結(jié)果完全一樣。