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

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

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

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

Java Hibernate使用SessionFactory創建Session案例詳解

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

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

    SessionFactory在Hibernate中實際上起到了一個緩沖區的作用 他緩沖了HIbernate自動生成SQL語句和其他的映射數據 還緩沖了一些將來有可能重復利用的數據
    為了能創建一個SessionFactory對象 應該在Hibernate初始化的時候創建一個Configuration類的實例 并將已經寫好的映射文件交給他處理 這樣Configuration對象就可以創建一個SessionFactory對象 當SessionFactory對象創建成功后 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這個輔助類 定義了一個靜態的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();

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

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對象 如果不存在 則創建Session對象 在創建Session對象時 首先要判斷系統是否已經加載Configuration 如果沒有sessionFactory 則需要先創建該對象 創建完成的Session對象 需要保存在threadLocal中以供本次訪問線程的下一次調用

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

?
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();
        }
    }

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

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

延伸 · 閱讀

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

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

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

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

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

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

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

    Java使用SAX解析xml的示例

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

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

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

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

    程序猿DD9332021-10-08
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

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

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

    小米推送Java代碼

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

    富貴穩中求8032021-07-12
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

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

    Java教程網2942020-09-17
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

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

    spcoder14552021-10-18
主站蜘蛛池模板: 四虎4hu新地址入口 四虎1515h永久 | 亚洲欧美日韩综合一区久久 | 99久久99热久久精品免费看 | 91精品啪在线观看国产线免费 | 免费黄色网站视频 | 男人在线影院 | 全是女性放屁角色的手游 | 亚洲国产中文字幕在线视频综合 | 日韩一区二区三区在线 | 我年轻漂亮的继坶2中字在线播放 | 久久精品久久久久 | 7788av| 91亚洲在线 | 久久亚洲网站 | 日本天堂影院在线播放 | 国产日本久久久久久久久婷婷 | 91美女在线视频 | 好看的亚洲视频 | 国产精品视频免费视频 | 天天插伊人| 涩色网| 九九热在线免费观看 | v视界影院_vsjla | 欧美日韩亚洲综合在线一区二区 | 视频一区二区三区欧美日韩 | 精品亚洲视频在线观看 | 91麻豆精东果冻天美传媒老狼 | 久久毛片视频 | 亚洲国产第一 | 日产乱码卡1卡2卡三免费 | 69热精品视频在线看影院 | 国产精品永久免费自在线观看 | 日本人黄色 | 国产午夜不卡 | 五月天婷婷精品免费视频 | 九九精品视频在线观看九九 | 久久这里只有精品视频9 | 亚洲精品久久啪啪网站成年 | meyd–456佐山爱在线播放 | 91免费精品国自产拍在线可以看 | 国产在线欧美日韩精品一区二区 |