一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術(shù)及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java Hibernate使用SessionFactory創(chuàng)建Session案例詳解

Java Hibernate使用SessionFactory創(chuàng)建Session案例詳解

2021-12-06 12:50xueliangfei Java教程

這篇文章主要介紹了Java Hibernate使用SessionFactory創(chuàng)建Session案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下

    SessionFactory在Hibernate中實際上起到了一個緩沖區(qū)的作用 他緩沖了HIbernate自動生成SQL語句和其他的映射數(shù)據(jù) 還緩沖了一些將來有可能重復利用的數(shù)據(jù)
    為了能創(chuàng)建一個SessionFactory對象 應該在Hibernate初始化的時候創(chuàng)建一個Configuration類的實例 并將已經(jīng)寫好的映射文件交給他處理 這樣Configuration對象就可以創(chuàng)建一個SessionFactory對象 當SessionFactory對象創(chuàng)建成功后 Configuration對象就沒用用了 就可以簡單的拋棄他
示例代碼:
?
1
2
3
4
Configuration cfg = new Configuration();
cfg.addResource("com/demo/hibernate/beans/User.hbm.xml");
cfg.setProperty(System.getProperties());
SessionFactory sessionFactory = cfg.buildSessionFactory();

SessionFactory用到了一個設計模式 工廠模式 用戶程序從工程類SessionFactory取得Session實例 設計者的意圖就是讓它能在整個應用中共享 典型的來說 一個項目通常只需要一個SessionFactory就夠了 因此我們就設計了HibernateSessionFactory.java這個輔助類 定義了一個靜態(tài)的Configuration和SessionFactory對象

?
1
2
private static final Configuration cfg = new Configuration();
private static org.hibernate.SessionFactory sessionFactory;

這兩個對象對整個應用來說只有一個實例存在 因此為用戶的訪問定義一個本地線程變量:

?
1
private static final ThreadLocal threadLocal = new ThreadLocal();

該線程變量是靜態(tài)的 對每一個訪問該線程的用戶產(chǎn)生一個實例 這樣在要取得Session對象時 首先從當前用戶的線程中取得Session對象 如果還沒有創(chuàng)建 則從SessionFactory中創(chuàng)建一個Session 此時會判斷SessionFactory對象是否已經(jīng)創(chuàng)建 該對象對這個應用來說 只有一個 因此 只有第一次訪問該變量的用戶才會創(chuàng)建該對象

HibernateSessionFactory.java 取得Session對象的過程如下表示

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public static Session currentSession() throws HibernateException {
        Session session = (Session) threadLocal.get();
 
        if (session == null) {
            if (sessionFactory == null) {
                try {
                    cfg.configure(CONFIG_FILE_LOCATION);
                    sessionFactory = cfg.buildSessionFactory();
                }
                catch (Exception e) {
                    System.err.println("%%%% Error Creating SessionFactory %%%%");
                    e.printStackTrace();
                }
            }
            session = sessionFactory.openSession();
            threadLocal.set(session);
        }
 
        return session;
    }

首先判斷threadLocal中是否存在Session對象 如果不存在 則創(chuàng)建Session對象 在創(chuàng)建Session對象時 首先要判斷系統(tǒng)是否已經(jīng)加載Configuration 如果沒有sessionFactory 則需要先創(chuàng)建該對象 創(chuàng)建完成的Session對象 需要保存在threadLocal中以供本次訪問線程的下一次調(diào)用

在關(guān)閉Session對象是 只需要從當前線程中取得Session對象 關(guān)閉該對象 并置空本地線程變量即可

?
1
2
3
4
5
6
7
8
public static void closeSession() throws HibernateException {
        Session session = (Session) threadLocal.get();
        threadLocal.set(null);
 
        if (session != null) {
            session.close();
        }
    }

到此這篇關(guān)于Java Hibernate使用SessionFactory創(chuàng)建Session案例詳解的文章就介紹到這了,更多相關(guān)Java 使用SessionFactory創(chuàng)建Session內(nèi)容請搜索服務器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務器之家!

原文鏈接:http://blog.chinaunix.net/uid-26284395-id-3049145.html

延伸 · 閱讀

精彩推薦
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發(fā)現(xiàn)了對于集合操作轉(zhuǎn)換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關(guān)于Java8中S...

    阿杜7482021-02-04
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發(fā)項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經(jīng)有好久沒有升過級了。升級完畢重啟之后,突然發(fā)現(xiàn)好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java實現(xiàn)搶紅包功能

    Java實現(xiàn)搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現(xiàn)搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關(guān)于小米推送Java代碼,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩(wěn)中求8032021-07-12
  • Java教程xml與Java對象的轉(zhuǎn)換詳解

    xml與Java對象的轉(zhuǎn)換詳解

    這篇文章主要介紹了xml與Java對象的轉(zhuǎn)換詳解的相關(guān)資料,需要的朋友可以參考下...

    Java教程網(wǎng)2942020-09-17
  • Java教程Java BufferWriter寫文件寫不進去或缺失數(shù)據(jù)的解決

    Java BufferWriter寫文件寫不進去或缺失數(shù)據(jù)的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數(shù)據(jù)的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
主站蜘蛛池模板: 久久伊人在 | 日韩视频一区 | fuqer日本 | 午夜一区二区三区 | 好看华人华人经典play | 免费人成在线观看视频播放 | 日韩大片免费看 | 女女宿舍互慰h文小说 | 亚洲精品第一国产综合高清 | 成年人视频在线免费看 | 四虎永久在线精品国产 | 美女精品永久福利在线 | 亚洲免费在线视频 | 小小水蜜桃视频高清在线播放 | 精品久久一 | 99超级碰碰成人香蕉网 | 日韩欧美国产成人 | 无码AV免费精品一区二区三区 | 91麻豆精品国产 | 美女脱衣有肉 | 2021海角社区最新版 | 国产精品边做边接电话在线观看 | freesex1718处xx | 高清黄色直接看 | 奇米777狠狠 | 99精品热视频 | 91四虎国自产在线播放线 | 超碰成人在线播放 | 精品日产1区2卡三卡麻豆 | 97国产蝌蚪视频在线观看 | gay男强壮军人chinese | 小小水蜜桃3视频在线观看 小鸟酱喷水 | 欧美成年黄网站色高清视频 | 欧美a级在线观看 | 日本 视频 在线 | 亚洲欧美另类专区 | 99久久国产视频 | free性欧洲 | 亚洲国产成人久久综合一区77 | 四虎影院在线免费观看视频 | 日韩高清一区 |