更新時(shí)間:2024年01月19日11時(shí)05分 來(lái)源:傳智教育 瀏覽次數(shù):
Session是Java應(yīng)用程序和Hibernate進(jìn)行交互時(shí)所使用的主要接口,是持久化操作的核心API。它主要用于讀取、創(chuàng)建和刪除映射對(duì)象的實(shí)例,這一系列的操作將被轉(zhuǎn)換為數(shù)據(jù)表中的增加、修改、查詢和刪除操作。Session是輕量級(jí)的,實(shí)例的創(chuàng)建和銷毀不需要消耗太多的資源,同時(shí)它還是Hibernate的一級(jí)緩存,這個(gè)緩存主要用于存放當(dāng)前工作單元加載的對(duì)象。
獲取Session實(shí)例有兩種方式,一種是通過(guò)openSession()方法,另一種是通過(guò)getCurrentSession()方法。兩種方法獲取Session的代碼如下所示:
以上兩種獲取Session實(shí)例的主要區(qū)別是:采用openSession()方法獲取Session實(shí)例時(shí),SessionFactory直接創(chuàng)建一個(gè)新的Session實(shí)例,并且在使用完成后需要調(diào)用close()方法進(jìn)行手動(dòng)關(guān)閉;而getCurrentSession()方法創(chuàng)建的Session實(shí)例會(huì)被綁定到當(dāng)前線程中,它在提交或回滾操作時(shí)會(huì)自動(dòng)關(guān)閉。
在Session中,提供了多個(gè)持久化的操作方法,其常用方法如表23-8所示。
表23-8 Session中的常用方法
需要注意的是,Session是線程不安全的,當(dāng)多個(gè)并發(fā)線程同時(shí)操作一個(gè)Session實(shí)例時(shí),就可能導(dǎo)致Session數(shù)據(jù)存取的混亂(當(dāng)方法內(nèi)部定義和使用Session時(shí),不會(huì)出現(xiàn)線程問題)。因此設(shè)計(jì)軟件架構(gòu)時(shí),應(yīng)避免多個(gè)線程共享一個(gè)Session實(shí)例。
北京校區(qū)