中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

hibernate的sessionfactory是做什么的

發布時間:2021-12-06 09:07:59 來源:億速云 閱讀:283 作者:iii 欄目:大數據

本篇內容介紹了“hibernate的sessionfactory是做什么的”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

問:hibernate的sessionfactory是干嘛的?session又是干嘛的呢?

在回答這個問題之前,先來看看一些概念。

一、hibernate是什么?

Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數據庫。Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應用中使用。    ----百度百科
其實我自己的理解是,使用hibernate,最常用的場景是,使用它的ORM機制,然后把傳統的關系型數據庫操作,轉換為面向對象的方式來操作。為什么這么做呢?在沒有使用到ORM之前。一個簡單的例子,你在表單上,填了好多個數據,姓名,性別,年齡。。。。。愛好等等等,然后你使用JDBC去連接數據庫,接下來一條一條的把數據從request或者某個地方讀進來,如果有100個,表示需要定義100個變量來暫存這些表單數據,然后在保存到數據庫中,在保存的時候,也要一下下的寫sql語句,再次傳100個值。。。如果是1000個。。想想就好累。
那么如果  有了ORM,是什么情況,  你只要把對應的數據庫的表,映射為一個對象(比如student)。然后在表單對應的input的name上,填寫對應對象的對應屬性(比如student.name),  然后在保存的時候,在  提交到的Action中,  定義一個student的對象實例,  那么這些數據就會自動保存在這個對象中了。接下來,你  只需要保存一下這個對象就ok了。是不是感覺方便了好多。

二、什么是sessionfactory

SessionFactory接口負責初始化Hibernate。它  充當數據存儲源的代理,并  負責創建Session對象。這里用到了  工廠模式。需要注意的是SessionFactory并不是輕量級的,因為一般情況下,一個項目通常只需要一個SessionFactory就夠,當需要操作多個數據庫時,可以為每個數據庫指定一個SessionFactory。                                        ----百度百科
我的理解是,其實顧名思義,sessionfactory,就是用來   創建session會話(具體接下來講)的工廠。想想有一個特別大的工廠,專門用來在你需要使用session的時候,讓它幫你創建一個就好了。(突然記起來一個冷笑話,如果你沒有對象怎么辦?辦法是,new一個出來唄。。額你沒有笑,我知道)。但是需要注意一下就是,一般來講,一個web工程(系統),如果涉及到的是一個數據庫(你在學校做項目,一般就一個吧。。。哈哈哈),那么本工程就只需要一個sessionfactory就夠了。這個工程所涉及到的所有的session,都交由這個sessionfactory來管理。

接下來,創建一個sessionfactory,一般有兩種創建方式,1.從XML文件讀取配置信息構建SessionFactory,2.從Java屬性文件讀取配置信息構建SessionFactory。

第一種:


1》實例化Configuration對象,默認讀取src目錄下的hibernate.cfg.xml,配置文件

<span style="font-size:18px;">Configuration config = new Configuration().configure();</span>


或者在configure();中指明文件名稱和路徑

<span style="font-size:24px;">Configuration config = new Configuration().configure("hibernate.cfg.xml");</span>


2》現在這個config對象,已經包括所有Hibernate運行期的參數,通過Configuration實例的buildSessionFactory()方法可以構建一個惟一的SessionFactory:

<span style="font-size:24px;">SessionFactory sessionFactory = config.buildSessionFactory();</span>


第二種


1》創建一個Configuration對象,此時Hibernate會默認加載classpath中的配置文件hibernate.properties,代碼如下。

Configuration config = new Configuration();


2》由于在配置文件中缺少相應的配置映射文件的信息,所以此處需要通過編碼方式加載,這可以通過Configuration對象的addClass()方法實現,具體代碼如下。

config.addClass(BranchForm.class);
 

addClass()方法用于加載實體類。


3》完成配置文件和映射文件的加載后,將得到一個包括所有Hibernate運行期參數的Configuration實例,通過Configuration實例的buildSessionFactory()方法可以構建一個惟一的SessionFactory,代碼如下。

SessionFactory sessionFactory = config.buildSessionFactory();
 

構建SessionFactory要放在靜態代碼塊中,因為它只需在該類被加載時執行一次。

三、什么是Session

提起來Session的話,首先想到的是http這個東東的session,想到了http這個無狀態的協議,沒辦法保存任何訪問對象的信息,所以就出現了session這個東東,用來記錄訪問者的一些信息。   但是,好好轉折一下下,轉折,轉折,轉折說三遍。
在hibernate中的session   并不是http中所說的session,一般把HttpSession對象稱為用戶會話。。。
而hibernate中的Session呢?是用來表示,   應用程序和   數據庫的一次交互(會話)。在這個Session中,包含了一般的持久化方法(CRUD),不要說不知道CRUD是什么。而且,Session是一個輕量級對象(線程不安全),通常將每個Session實例和一個數據庫事務綁定,也就是每執行一個數據庫事務,都應該先創建一個新的Session實例,在使用Session后,還需要   關閉Session。   (記得關閉哈)  
接下來,創建一個Session對象,依據第二步得到的sessionfactory對象。  
 
<span style="font-size:24px;">Session session=sessionFactory.openSession();</span>


然后得到這個session之后,就可以使用它來進行數據庫的具體操作了,給一個簡單的代碼。多說一句,一般來說在使用session的時候,都會用到事務,尤其是需要對數據做修改的時候。上代碼:

<span style="font-size:24px;">public void save(Student student) {    Transaction transaction= getSession().beginTransaction();  //開啟事務    getSession().save(student);//只要傳一個Student的對象實例            transaction.commit();  //事務提交     getSession().close();//關閉session}</span>

“hibernate的sessionfactory是做什么的”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南宁市| 高淳县| 富裕县| 滁州市| 兴国县| 晋州市| 郯城县| 陈巴尔虎旗| 玉林市| 康平县| 钟山县| 榆中县| 息烽县| 江城| 长寿区| 阿巴嘎旗| 鄂州市| 灵山县| 连州市| 乐业县| 宁乡县| 滨海县| 响水县| 财经| 女性| 普兰县| 阳西县| 界首市| 喀什市| 大关县| 齐河县| 崇信县| 微山县| 车险| 九龙坡区| 安溪县| 石河子市| 平安县| 渝中区| 德清县| 桑植县|