自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

強(qiáng)人Hibernate文檔筆記(中)

開發(fā) 后端
Hibernate文檔筆記共分為三個(gè)部分,此處是第二部分,講述了Contextual Sessions、Configuration、獲取SessionFactory和JDBC Connections(Session是對JDBC連接的封裝)。

Hibernate文檔筆記共分為三個(gè)部分,此處是第二部分,講述了Contextual Sessions、Configuration、獲取SessionFactory和JDBC Connections(Session是對JDBC連接的封裝)。

五、Contextual Sessions

許多應(yīng)用程序需要一種和上下文有關(guān)聯(lián)Hibernate session,這樣的session是指貫穿于給定環(huán)境的上下文中都有效的session。無論如何,貫穿于應(yīng)用程序應(yīng)用上下文由什么組成的清晰度不同,不同的上下文針對當(dāng)前的概念有不同的范圍。

使用Hibernate 3.0以前版本的應(yīng)用程序,趨于使用自已實(shí)現(xiàn)的基于ThreadLocal來維護(hù)前后關(guān)系的session、諸如HibernateUtil的幫助類;或使用基于代理或攔截機(jī)制的第三方的框架(Spring或Pico)。

從Hibernate 3.0.1,Hibernate加入了SessionFactory.getCurrentSession()方法。最初,假定使用JTA事務(wù)定義了當(dāng)前session的scope和context。Hibernate團(tuán)隊(duì)維護(hù)時(shí),給定了成熟的卓越的JTA TransactionManager的實(shí)現(xiàn)方式,多數(shù)(但不是所有)應(yīng)用程序應(yīng)該使JTA transaction management,不論它是否發(fā)布到一個(gè)JEE容器中?;谶@一點(diǎn),基于用JTA來維護(hù)上下文關(guān)系中的session應(yīng)該是必須的。

無論如何,在Hibernate 3.1,SessionFactory.getCurrentSession()之后的處理,是可以被插拔的,也就是說可以session的范圍和上下文。新擴(kuò)展接口(org.hibernate.context.CurrentSessionContext)和新的配置參數(shù)(hibernate.current_session_context_class)被加入,允許插拔,也就是說可以定義session的范圍和上下文。

細(xì)節(jié)可以查看org.hibernate.context.CurrentSessionContext的文檔。它定義了一個(gè)currentSession()方法,負(fù)責(zé)跟蹤與當(dāng)前上下文相關(guān)聯(lián)的session。Hibernate提供了這個(gè)接口的三種實(shí)現(xiàn)方式。

1.org.hibernate.context.JTASessionContext

當(dāng)前session,通過JTA事務(wù)跟蹤和標(biāo)識(shí)生命周期。這里的處理過程在處理方法上和老JTA是相似的。

2.org.hibernate.context.ThreadLocalSessionContext

當(dāng)前session,通過當(dāng)前執(zhí)行的線程來跟蹤。

3.org.hibernate.context.ManagedSessionContext

當(dāng)前session,通過當(dāng)前執(zhí)行的線程來跟蹤。你是負(fù)責(zé)綁定和解除當(dāng)前session到執(zhí)行線程通過使用這個(gè)類的靜態(tài)方法。該類不會(huì)open、flush、close session。

前兩個(gè)實(shí)現(xiàn)類,提供了“一個(gè)session對應(yīng)一個(gè)數(shù)據(jù)庫事務(wù)”的編程模式,也就是眾所周知的“session-per-request”模式。Hibernate session的開始和結(jié)束,是以數(shù)據(jù)庫中事務(wù)的執(zhí)行時(shí)間為依據(jù)的。如果你使用編程方式劃分事務(wù),用簡單的JSE需不是JTA,你應(yīng)該考慮使用Hibernate事務(wù)APIs來隱藏低層的事務(wù)代碼。如果你使用的是JTA,使用JTA的接口來劃分事務(wù)。如果你在一個(gè)支持CMT(Container Management Transaction)的容器運(yùn)行程序,事務(wù)是通過聲明定義,在你程序中不需要任何的代碼來劃分事務(wù)。

Hibernate.current_session_context_class參數(shù)應(yīng)該指定,一個(gè)org.hibernate.context.CurrentSessionContext的實(shí)現(xiàn)類。如果配置參數(shù)沒有被設(shè)置,而是配置了一個(gè)org.hibernate.transaction.TransactionManagerLookup被設(shè)置,Hibernate將使用org.hibernate.context.JTASessionContext,這里要考慮向后兼容。典型的情況下,這個(gè)參數(shù)是使用的類的名字。對于Hibernate提供的三個(gè)實(shí)現(xiàn)類,有對應(yīng)的三個(gè)簡短名,“jta”、“thread”、“managed”。

六、Configuration

1.編程配置

一個(gè)org.hibernate.cfg.Configuration的實(shí)例表示一個(gè)應(yīng)用程序的所有Java類型到數(shù)據(jù)庫類型的映射。org.hibernate.cfg.Configuration是用來建造一個(gè)org.hibernate.SessionFactory。被編譯的映射是來自所有的XML映射文件。

片斷1.

  1. Configuration cfg = new Configuration().addResource(“test.hbm.xml”); 

片斷2.

  1. Configuration cfg = new Configuration().addClass(com.test.class); 

片斷3.

  1. Configuration cfg = new Configuration().setProperty(“hibernate.dialect”, “org.hibernate.dialect.DB2Dialect”); 

Configuration可以接收的選項(xiàng):

(1)傳遞一個(gè)java.util.Properties到Configuration.setProperties()。

(2)放一個(gè)hibernate.properties文件到類路徑的根目錄。

(3)設(shè)置系統(tǒng)properties,通過java –Dproperty=value。

(4)包含標(biāo)簽指定值在hibernate.cfg.xml文件。

org.hibernate.cfg.Configuration對象是有意作為一個(gè)開始時(shí)間生成的對象的,一旦SessionFactory被創(chuàng)建,他將被拋棄掉。

七、獲取SessionFactory

當(dāng)org.hibernate.cfg.Configuration解析完所有的映射文件后,應(yīng)用程序應(yīng)該獲取一個(gè)org.hibernate.Session實(shí)例的工廠。這個(gè)工廠是被應(yīng)用程序的所有線程共享的。

  1. SessionFactory sessionFactory = cfg.buildSessionFactory(); 

Hibernate允許應(yīng)用程序?qū)嵗鄠€(gè)SessionFactory。對于使用多個(gè)數(shù)據(jù)庫的應(yīng)用程序是非常有用的。

八、JDBC Connections(Session是對JDBC連接的封裝)

通常,你應(yīng)該使用org.hibernate.SessionFactory來創(chuàng)建或共享JDBC。如果這采用這種方法,是非常簡單的。

  1. Session session = sessionFactory.openSession(); 

當(dāng)你的操作需要訪問數(shù)據(jù)庫時(shí),一個(gè)JDBC連接就會(huì)從連接池中被獲取。

對于這個(gè)工作,我們應(yīng)該給Hibernate提供一些JDBC連接屬性。所有的Hibernate屬性名和語義學(xué)都被定義在org.hibernate.cfg.Environment。我們現(xiàn)在描述對于JDBC連接配置的一些更重要的設(shè)置。

1.如果你設(shè)置以下屬性,Hibernate將獲取或共享連接使用java.sql.DriverManager:

  1. hibernate.connection.driver_class  
  2.  
  3. hibernate.connection.url  
  4.  
  5. hibernate.connection.username  
  6.  
  7. hibernate.connection.password  
  8.  
  9. hibernate.connection.pool_size 

Hibernate自己擁有的連接池算法是沒有發(fā)展的。他是為了你的初始接觸使用的,而不是為了你的產(chǎn)品使用的,甚至性能測試時(shí)使用。為了更好的性能和穩(wěn)定性考慮,你應(yīng)該使用第三方的連接池產(chǎn)品。只需要替換hibernate.connection.pool_size屬性的設(shè)置用相應(yīng)連接池的設(shè)置。這將關(guān)閉Hibernate內(nèi)部的連接池。例如,可以使用C3P0。

C3P0是一個(gè)開源的JDBC連接池,被放置在Hibernate發(fā)布文件的lib目錄下,隨Hibernate一塊發(fā)行。如果你設(shè)置hibernate.c3p0.*屬性,Hibernate將會(huì)使用org.hibernate.connection.C3P0ConnectionProvider為共享連接。如果你想使用proxool作為連接池,你可以通過查閱hibernat.properties或Hibernate站點(diǎn)獲取需要設(shè)置的屬性名設(shè)置。

C3P0配置舉例,屬性文件片斷:

  1. hibernate.connection.driver_class=  
  2.  
  3. hibernate.connection.url=  
  4.  
  5. hibernate.connection.username=  
  6.  
  7. hibernate.connection.password=  
  8.  
  9. hibernate.c3p0.min_size=  
  10.  
  11. hibernate.c3p0.max_size=  
  12.  
  13. hibernate.c3p0.timeout=  
  14.  
  15. hibernate.c3p0.max_statements=  
  16.  
  17. hibernate.dialect= 

2.對于在應(yīng)用服務(wù)器內(nèi)運(yùn)行的程序,多數(shù)情況你應(yīng)該配置Hibernate通過JNDI找到服務(wù)器的javax.sql.DataSource來獲取連接。你需要設(shè)置以下屬性。

  1. hibernate.connection.datasource  
  2.  
  3. hibernate.jndi.url  (可選)  
  4.  
  5. hibernate.jndi.class  (可選)  
  6.  
  7. hibernate.connection.username  (可選)  
  8.  
  9. hibernate.connection.password  (可選) 

你可以通過實(shí)現(xiàn)org.hibernate.connection.ConnectionProvider來定義自己的獲得連接的策略。通過hibernate.connection.provider_class配置使用自己的定義起作用。

【編輯推薦】

  1. 強(qiáng)人Hibernate文檔筆記(上)
  2. 初學(xué)者適用的Hibernate學(xué)習(xí)方法
  3. Hibernate實(shí)戰(zhàn)(第2版)讀書筆記
  4. Hibernate一對多關(guān)系的處理
  5. Hibernate的性能優(yōu)化
責(zé)任編輯:仲衡 來源: CSDN博客
相關(guān)推薦

2009-06-16 15:32:24

Hibernate文檔

2009-06-16 15:52:18

Hibernate文檔

2009-09-29 17:22:30

Hibernate S

2009-09-27 14:56:22

Hibernate H

2009-06-18 11:25:26

Hibernate L

2009-09-29 16:21:31

Hibernate單元

2009-06-16 13:09:15

Hibernate實(shí)戰(zhàn)Hibernate

2009-06-18 14:20:45

hibernate實(shí)戰(zhàn)

2009-06-17 16:08:58

Hibernate C

2009-09-24 14:28:23

Hibernate抓取

2009-09-24 13:03:38

Hibernate C

2009-06-26 16:15:04

Criteria的用法Hibernate

2009-06-12 16:00:13

Session方法Hibernate

2009-06-18 10:07:03

CriteriaHibernate

2009-09-24 13:25:58

Hibernate m

2009-10-26 10:31:20

linux庫

2011-08-23 11:13:56

Lua

2009-06-18 12:59:39

Criteria Qu深入淺出Hiberna

2009-09-22 09:40:03

cascade和invHibernate

2009-06-26 10:19:00

Clob字段Hibernate
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號