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

Hibernate中獲取Session的兩種方式代碼示例

 更新時間:2017年12月11日 16:04:19   作者:清清薄荷香  
這篇文章主要介紹了Hibernate中獲取Session的兩種方式代碼示例,具有一定借鑒價值,需要的朋友可以參考下。

Session:是應(yīng)用程序與數(shù)據(jù)庫之間的一個會話,是Hibernate運(yùn)作的中心,持久層操作的基礎(chǔ).對象的生命周期/事務(wù)的管理/數(shù)據(jù)庫的存取都與Session息息相關(guān).

Session對象是通過SessionFactory構(gòu)建的,下面舉個例子來介紹Hibernate兩種獲取session的方式。

日志,是編程中很常見的一個關(guān)注點(diǎn).用戶在對數(shù)據(jù)庫進(jìn)行操作的過程需要將這一系列操作記錄,以便跟蹤數(shù)據(jù)庫的動態(tài).那么一個用戶在向數(shù)據(jù)庫插入一條記錄的時候,就要向日志文件中記錄一條記錄,用戶的一系列操作都要在一個Session中進(jìn)行,否則這就成為了兩個線程.不能保證同步.看下面的代碼

HibernateUtil管理Session的工具類

package com.bjpowernode.usermgr.util;
import org.hibernate.Session;
//hibernate3的 
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtils {
	private static SessionFactory factory;
	static{
		try{
			//讀取hibernate.cfg.xml文件 
			Configuration cfg=new Configuration().configure();
			//建立SessionFactory 
			factory=cfg.buildSessionFactory();
		}
		catch(Exception e){
			e.printStackTrace();
		}
	}
	//獲得開啟著的Session 
	public static Session getSession(){
		return factory.openSession();
	}
	//關(guān)閉Session 
	public static void closeSession(Session session){
		if(session!=null){
			if(session.isOpen()){
				session.close();
			}
		}
	}
	public static SessionFactory getSessionFactory(){
		return factory;
	}
}

用戶業(yè)務(wù)邏輯層

package com.bjpowernode.usermgr.manager;
import java.util.Date;
import org.hibernate.Session;
import com.bjpowernode.usermgr.domain.Log;
import com.bjpowernode.usermgr.domain.User;
import com.bjpowernode.usermgr.util.HibernateUtils;
public class UserManagerImpl implements UserManager {
	/** 
  * 添加用戶和添加日志都使用了同一個Session,所以 
  * 當(dāng)用戶添加失敗的時候,日志也會添加失敗。事務(wù)回滾 
  * 用戶添加成功日志也會添加成功 
  */
	public void addUser(User user) {
		Session session=null;
		try{
			//取得當(dāng)前線程Session 
			session=HibernateUtils.getSessionFactory().getCurrentSession();
			session.beginTransaction();
			//保存用戶 
			session.save(user);
			Log log=new Log();
			log.setType("操作日志");
			log.setTime(new Date());
			log.setDetail("XXX");
			LogManager logManager=new LogManagerImpl();
			//保存日志 
			logManager.addLog(log);
			session.getTransaction().commit();
		}
		catch(Exception e){
			e.printStackTrace();
			session.getTransaction().rollback();
		}
	}
}

日志實現(xiàn)類:

package com.bjpowernode.usermgr.manager;
import org.hibernate.Session;
import com.bjpowernode.usermgr.domain.Log;
import com.bjpowernode.usermgr.util.HibernateUtils;
public class LogManagerImpl implements LogManager {
	public void addLog(Log log) {
		//獲取當(dāng)前線程的Session 
		HibernateUtils.getSessionFactory().getCurrentSession().save(log);
	}
}

測試類

package com.bjpowernode.usermgr.manager;
import junit.framework.TestCase;
import com.bjpowernode.usermgr.domain.User;
public class UserManagerImplTest extends TestCase {
	public void testAddUser() {
		UserManager userManager=new UserManagerImpl();
		User user=new User();
  user.setName("張三"); 
  userManager.addUser(user); 
} 

注意:

1.openSession和getCurrentSession的區(qū)別?

*openSession必須關(guān)閉,currentSession在事務(wù)結(jié)束后自動關(guān)閉

*openSession沒有和當(dāng)前線程綁定,currentSession和當(dāng)前線程綁定

2.如果使用currentSession需要在hibernate.cfg.xml文件中進(jìn)行配置:

*如果是本地事務(wù)(jdbc事務(wù))

<propertyname="hibernate.current_session_context_class">thread</property>

*如果是全局事務(wù)(jta事務(wù))

<propertyname="hibernate.current_session_context_class">jta</property>

全局事務(wù):資源管理器管理和協(xié)調(diào)的事務(wù),可以跨越多個數(shù)據(jù)庫和進(jìn)程。資源管理器一般使用XA二階段提交協(xié)議與“企業(yè)信息系統(tǒng)”(EIS)或數(shù)據(jù)庫進(jìn)行交互。

本地事務(wù):在單個EIS或數(shù)據(jù)庫的本地并且限制在單個進(jìn)程內(nèi)的事務(wù)。本地事務(wù)不涉及多個數(shù)據(jù)來源。

總結(jié)

以上就是本文關(guān)于Hibernate中獲取Session的兩種方式代碼示例的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱:

hibernate通過session實現(xiàn)增刪改查操作實例解析

快速了解Hibernate中的Session

Hibernate使用hbm.xml配置映射關(guān)系解析

如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關(guān)文章

  • Spring中@Controller和@RestController的區(qū)別詳解

    Spring中@Controller和@RestController的區(qū)別詳解

    這篇文章主要介紹了Spring中@Controller和@RestController的區(qū)別詳解,@RestController?是?@Controller?和?@ResponseBody?的結(jié)合體,單獨(dú)使用?@RestController?的效果與?@Controller?和?@ResponseBody?二者同時使用的效果相同,需要的朋友可以參考下
    2023-10-10
  • javafx實現(xiàn)圖片3D翻轉(zhuǎn)效果方法實例

    javafx實現(xiàn)圖片3D翻轉(zhuǎn)效果方法實例

    程序?qū)崿F(xiàn)思路: 在javafx中Node對象有一個effect屬性,可以用于實現(xiàn)各種特效。PerspectiveTransform特效可以使Node對象實現(xiàn)透視變換。因此我們可以通過計算透視變換中每個點(diǎn)的位置來實現(xiàn)3D翻轉(zhuǎn)特效。
    2013-04-04
  • java+sqlserver實現(xiàn)學(xué)生信息管理系統(tǒng)

    java+sqlserver實現(xiàn)學(xué)生信息管理系統(tǒng)

    這篇文章主要介紹了利用java和sqlserver實現(xiàn)學(xué)生信息管理系統(tǒng),違章內(nèi)容主要建立了與sqlserver數(shù)據(jù)庫的連接開始展開內(nèi)容,能學(xué)到了解JDBC執(zhí)行SQL的語法,需要的朋友可以參考一下
    2021-12-12
  • Java中的Kafka消費(fèi)者詳解

    Java中的Kafka消費(fèi)者詳解

    這篇文章主要介紹了Java中的Kafka消費(fèi)者詳解,Kafka是一個分布式流行消息系統(tǒng),通常用于大規(guī)模數(shù)據(jù)處理和實時數(shù)據(jù)流應(yīng)用程序,它具有高吞吐量、可擴(kuò)展性和容錯性的特點(diǎn),需要的朋友可以參考下
    2023-09-09
  • Java實用小技能之快速創(chuàng)建List常用幾種方式

    Java實用小技能之快速創(chuàng)建List常用幾種方式

    java集合可以說無論是面試、刷題還是工作中都是非常常用的,下面這篇文章主要給大家介紹了關(guān)于Java實用小技能之快速創(chuàng)建List常用的幾種方式,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • 詳解Java?POI?excel自定義設(shè)置單元格格式

    詳解Java?POI?excel自定義設(shè)置單元格格式

    這篇文章主要介紹了Java?POI?excel設(shè)置單元格格式,自定義設(shè)置,設(shè)置單元格格式:來源_formats,更多數(shù)據(jù)類型從formats里面發(fā)現(xiàn),需要的朋友可以參考下
    2024-01-01
  • Unity&Springboot實現(xiàn)本地登陸驗證

    Unity&Springboot實現(xiàn)本地登陸驗證

    本文主要介紹了Unity&Springboot服務(wù)器/本地登陸驗證,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Java利用Geotools從DEM數(shù)據(jù)中讀取指定位置的高程信息全過程

    Java利用Geotools從DEM數(shù)據(jù)中讀取指定位置的高程信息全過程

    Geotools作為一款功能強(qiáng)大且開源的地理工具庫,為地理數(shù)據(jù)的處理和分析提供了豐富的類庫和便捷的接口,能夠很好地滿足從DEM數(shù)據(jù)中讀取高程信息這一實戰(zhàn)需求,本文將深入講解如何利用Geotools從獲取DEM數(shù)據(jù)到成功讀取指定位置高程信息的全過程,需要的朋友可以參考下
    2025-03-03
  • 在controller中如何設(shè)置接收參數(shù)的默認(rèn)值

    在controller中如何設(shè)置接收參數(shù)的默認(rèn)值

    這篇文章主要介紹了在controller中如何設(shè)置接收參數(shù)的默認(rèn)值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java 注解學(xué)習(xí)筆記

    Java 注解學(xué)習(xí)筆記

    一直都在使用注解,但是一直都沒有用的很明白,后來被逼的發(fā)現(xiàn)不搞明白真的就沒有辦法愉快的寫代碼了,所以,這篇《Java中的注解學(xué)習(xí)筆記》就呼之欲出了
    2020-10-10

最新評論

台东县| 集安市| 县级市| 沁源县| 防城港市| 新泰市| 高安市| 吉安市| 陇西县| 宝山区| 庐江县| 永登县| 泸溪县| 京山县| 海晏县| 莆田市| 徐汇区| 林甸县| 汤阴县| 德州市| 宁河县| 武陟县| 桓仁| 永济市| 廊坊市| 锦州市| 定西市| 桂林市| 瓮安县| 太湖县| 张家口市| 从化市| 西和县| 友谊县| 富锦市| 长治县| 巫山县| 开原市| 徐汇区| 永修县| 泰和县|