最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2021年08月26日 10:36:27   作者:xueliangfei  
這篇文章主要介紹了Java Hibernate使用SessionFactory創(chuàng)建Session案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    SessionFactory在Hibernate中實際上起到了一個緩沖區(qū)的作用 他緩沖了HIbernate自動生成SQL語句和其他的映射數(shù)據(jù) 還緩沖了一些將來有可能重復(fù)利用的數(shù)據(jù)
    為了能創(chuàng)建一個SessionFactory對象 應(yīng)該在Hibernate初始化的時候創(chuàng)建一個Configuration類的實例 并將已經(jīng)寫好的映射文件交給他處理 這樣Configuration對象就可以創(chuàng)建一個SessionFactory對象 當(dāng)SessionFactory對象創(chuàng)建成功后 Configuration對象就沒用用了 就可以簡單的拋棄他
示例代碼:
Configuration cfg = new Configuration();
cfg.addResource("com/demo/hibernate/beans/User.hbm.xml");
cfg.setProperty(System.getProperties());
SessionFactory sessionFactory = cfg.buildSessionFactory();

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

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

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

private static final ThreadLocal threadLocal = new ThreadLocal();

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

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

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對象是 只需要從當(dāng)前線程中取得Session對象 關(guān)閉該對象 并置空本地線程變量即可

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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • idea中創(chuàng)建新類時自動添加注釋的實現(xiàn)

    idea中創(chuàng)建新類時自動添加注釋的實現(xiàn)

    在每次使用idea創(chuàng)建一個新類時,過了一段時間發(fā)現(xiàn)看不懂這個類是用來干嘛的,為了解決這個問題,我們可以設(shè)置在創(chuàng)建一個新類時自動添加注釋,幫助我們理解這個類的用處,本文主要介紹了在idea中創(chuàng)建新類時自動添加注釋的實現(xiàn),感興趣的可以了解一下
    2025-03-03
  • Java如何實現(xiàn)Word文檔分欄效果

    Java如何實現(xiàn)Word文檔分欄效果

    這篇文章主要介紹了Java如何實現(xiàn)Word文檔分欄效果,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • Java多態(tài)(動力節(jié)點Java學(xué)院整理)

    Java多態(tài)(動力節(jié)點Java學(xué)院整理)

    多態(tài)是指允許不同類的對象對同一消息做出響應(yīng)。即同一消息可以根據(jù)發(fā)送對象的不同而采用多種不同的行為方式。接下來通過本文給大家介紹java多態(tài)相關(guān)知識,感興趣的朋友一起學(xué)習(xí)吧
    2017-04-04
  • Java Exception 捕獲和顯示實例詳解

    Java Exception 捕獲和顯示實例詳解

    這篇文章主要介紹了Java Exception 捕獲和顯示實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • 詳細(xì)介紹Spring的配置文件

    詳細(xì)介紹Spring的配置文件

    這篇文章主要為大家詳細(xì)介紹了Spring中的配置文件的命名以及它的配置文件都有些什么。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟上小編一起學(xué)習(xí)一下
    2022-10-10
  • Java中數(shù)據(jù)轉(zhuǎn)換及字符串的“+”操作方法

    Java中數(shù)據(jù)轉(zhuǎn)換及字符串的“+”操作方法

    本文主要介紹了Java中的數(shù)據(jù)類型轉(zhuǎn)換,包括隱式轉(zhuǎn)換和強制轉(zhuǎn)換,隱式轉(zhuǎn)換通常用于將范圍較小的數(shù)據(jù)類型轉(zhuǎn)換為范圍較大的數(shù)據(jù)類型,而強制轉(zhuǎn)換則是將范圍較大的數(shù)據(jù)類型轉(zhuǎn)換為范圍較小的數(shù)據(jù)類型,本文介紹Java中數(shù)據(jù)轉(zhuǎn)換以及字符串的“+”操作,感興趣的朋友一起看看吧
    2024-10-10
  • 基于Restful接口調(diào)用方法總結(jié)(超詳細(xì))

    基于Restful接口調(diào)用方法總結(jié)(超詳細(xì))

    下面小編就為大家?guī)硪黄赗estful接口調(diào)用方法總結(jié)(超詳細(xì))。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Jackson java動態(tài)去除返回json中的值方式

    Jackson java動態(tài)去除返回json中的值方式

    文章介紹了在Java中使用@JsonInclude注解動態(tài)去除返回JSON中的非必需字段(如分頁信息)的解決方案,通過在字段上添加@JsonInclude注解并選擇合適的策略(如NON_NULL或NON_EMPTY),可以在非分頁情況下取消分頁字段,從而提高返回結(jié)果的靈活性和效率
    2024-12-12
  • Spring中的父子容器原理解析

    Spring中的父子容器原理解析

    這篇文章主要為大家介紹了Spring中的父子容器原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • MybatisPlus中@TableField注解的使用詳解

    MybatisPlus中@TableField注解的使用詳解

    這篇文章主要介紹了MybatisPlus中@TableField注解的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09

最新評論

青岛市| 新营市| 陵川县| 区。| 苍南县| 崇明县| 汤原县| 肥乡县| 云龙县| 光山县| 阿城市| 柳林县| 常山县| 甘洛县| 长葛市| 都匀市| 凌云县| 苍梧县| 道孚县| 缙云县| 阆中市| 沂水县| 安庆市| 南安市| 郯城县| 古蔺县| 金堂县| 南召县| 浠水县| 盐池县| 深泽县| 崇义县| 双流县| 屏南县| 冷水江市| 马龙县| 甘泉县| 婺源县| 班戈县| 遂昌县| 三江|