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

全面介紹Hibernate session

開(kāi)發(fā) 后端
這里介紹在Hibernate session就是Connection的一層高級(jí)封裝,一個(gè)session對(duì)應(yīng)了一個(gè)Connection,要實(shí)現(xiàn)延遲加載必須有session才行。

Hibernate還是比較常用的,于是我研究了一下Hibernate session,在這里拿出來(lái)和大家分享一下,希望對(duì)大家有用。

無(wú)論是立即加載還是延遲加載必須要連接數(shù)據(jù)庫(kù)的,而在java中連接數(shù)據(jù)庫(kù)是依賴(lài)java.sql.Connection,在Hibernate session就是Connection的一層高級(jí)封裝,一個(gè)session對(duì)應(yīng)了一個(gè)Connection,要實(shí)現(xiàn)延遲加載必須有session才行. 而且要進(jìn)行延遲加載還必須保證是同一個(gè)session才行,用另外一個(gè)session去延遲加載前一個(gè)session的代理對(duì)象是不行的.大家都知道 Connection是使用過(guò)后必須要進(jìn)行關(guān)閉的,那么我們?nèi)绾伪WC一次http請(qǐng)求過(guò)程中,一直都使用一個(gè)session呢,即一個(gè) Connection呢.而且還要保證http請(qǐng)求結(jié)束后正確的關(guān)閉.

好,現(xiàn)在我們知道了我們要解決的問(wèn)題
1.如何保證http請(qǐng)求結(jié)束后正確的關(guān)閉session
2.如何保證http請(qǐng)求過(guò)程中一直使用同一個(gè)session

***個(gè)問(wèn)題很容易想到,使用過(guò)濾器

  1. public void doFilter(ServletRequest request, 
    ServletResponse response,FilterChain filterChain) {  
  2. try {  
  3. filterChain.doFilter(request, response);  
  4. }  
  5. catch (IOException e) {  
  6. e.printStackTrace();  
  7. }  
  8. catch (ServletException e) {  
  9. e.printStackTrace();  
  10. }  
  11. finally {  
  12. try {  
  13. HibernateUtil.commitTransaction();  
  14. }  
  15. catch (Exception e) {  
  16. HibernateUtil.rollbackTransaction();  
  17. }  
  18. finally {  
  19. HibernateUtil.closeSession();  
  20. }  
  21. }  

要解決第二個(gè)問(wèn)題我們必須先搞清楚,http請(qǐng)求在java中是以什么樣的機(jī)制實(shí)現(xiàn)的,在java中一個(gè)請(qǐng)求就是一個(gè)線(xiàn)程,像流行的web容器 Tomcat等,往往都是采用線(xiàn)程池機(jī)制的也就是說(shuō)有n個(gè)線(xiàn)程在池子里面,每當(dāng)有http請(qǐng)求時(shí),隨機(jī)從線(xiàn)程池中取出一個(gè)線(xiàn)程對(duì)象去處理請(qǐng)求,實(shí)際上多次請(qǐng)求可能使用的是同一線(xiàn)程也可能不是,這是隨機(jī)的.要保證整個(gè)請(qǐng)求中使用同一session最容易想到的就是把這個(gè)session綁定到線(xiàn)程上,在 java中使用ThreadLocal可以輕松綁定變量,每個(gè)線(xiàn)程有一個(gè)自己的ThreadLocal,這個(gè)ThreadLocal會(huì)隨線(xiàn)程的銷(xiāo)毀一起銷(xiāo)毀,既然是每個(gè)線(xiàn)程有一個(gè)那么多個(gè)線(xiàn)程間自然是不會(huì)有影響了,所以把session綁定在ThreadLocal里面是***的選擇了,***我把Hibernate session的相關(guān)代碼發(fā)出來(lái)。

下面是一個(gè)調(diào)用的例子: view plaincopy to clipboardprint?

  1. public static void main(String[] args) throws Exception {  
  2. HibernateUtil.initSessionFactory(new File(Test.class.getClassLoader
    (.getResource("hibernate.cfg.xml").getFile()));  
  3. Session session = HibernateUtil.getSession();  
  4. HibernateUtil.transaction();  
  5. User u = new User();  
  6. u.setName("test");  
  7. session.save(u);  
  8. HibernateUtil.commitTransaction();  
  9. HibernateUtil.closeSession();  

【編輯推薦】

  1. Hibernate類(lèi)庫(kù)簡(jiǎn)單描述
  2. 淺析Hibernate延遲加載
  3. Spring Hibernate簡(jiǎn)單討論
  4. 介紹Hibernate版本的更新
  5. 簡(jiǎn)單講述Hibernate實(shí)例
責(zé)任編輯:佚名 來(lái)源: IT168
相關(guān)推薦

2009-09-28 13:49:44

Hibernate Q

2009-09-23 17:41:05

Hibernate事務(wù)

2009-09-28 10:24:58

Hibernate基礎(chǔ)

2009-06-12 16:00:13

Session方法Hibernate

2009-09-25 17:19:28

Hibernate持久

2009-09-29 16:04:29

Hibernate S

2009-09-24 17:24:20

Hibernate S

2009-09-25 10:53:40

Hibernate S

2009-09-22 10:09:21

Hibernate S

2009-09-23 17:03:08

Hibernate S

2009-09-25 13:51:13

Hibernate S

2009-09-23 17:18:16

Hibernate S

2009-09-24 10:50:31

Hibernate主鍵

2009-09-25 16:27:33

Hibernate S

2009-09-23 15:50:21

Hibernate u

2009-09-28 16:54:34

Hibernate示例

2009-09-21 16:56:14

Hibernateibatis

2009-09-28 17:27:27

Hibernate A

2009-09-29 10:12:03

Hibernate A

2009-06-26 16:34:50

delete()方法Hibernate S
點(diǎn)贊
收藏

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