欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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 {
	/** 
  * 添加用戶和添加日志都使用了同一個(gè)Session,所以 
  * 當(dāng)用戶添加失敗的時(shí)候,日志也會(huì)添加失敗。事務(wù)回滾 
  * 用戶添加成功日志也會(huì)添加成功 
  */
	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();
		}
	}
}

日志實(shí)現(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é)束后自動(dòng)關(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ù),可以跨越多個(gè)數(shù)據(jù)庫和進(jìn)程。資源管理器一般使用XA二階段提交協(xié)議與“企業(yè)信息系統(tǒng)”(EIS)或數(shù)據(jù)庫進(jìn)行交互。

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

總結(jié)

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

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

快速了解Hibernate中的Session

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

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

相關(guān)文章

  • Java中MapStruct入門使用及對(duì)比

    Java中MapStruct入門使用及對(duì)比

    MapStruct是一個(gè)Java注解處理器框架,用于簡化Java Bean之間的映射,本文主要介紹了Java中MapStruct入門使用及對(duì)比,感興趣的可以了解一下
    2023-12-12
  • java中重寫equals和重寫hashCode()

    java中重寫equals和重寫hashCode()

    這篇文章主要介紹了java中重寫equals和重寫hashCode()的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Java中equals比較方法使用詳解

    Java中equals比較方法使用詳解

    這篇文章主要給大家介紹了關(guān)于Java中equals比較方法使用的相關(guān)資料,在Java中equals()方法是Object類的一個(gè)實(shí)例方法,用于比較兩個(gè)對(duì)象是否相等,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • 詳解使用Spring?Data?repository進(jìn)行數(shù)據(jù)層的訪問問題

    詳解使用Spring?Data?repository進(jìn)行數(shù)據(jù)層的訪問問題

    這篇文章主要介紹了使用Spring?Data?repository進(jìn)行數(shù)據(jù)層的訪問,抽象出Spring Data repository是因?yàn)樵陂_發(fā)過程中,常常會(huì)為了實(shí)現(xiàn)不同持久化存儲(chǔ)的數(shù)據(jù)訪問層而寫大量的大同小異的代碼,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2022-06-06
  • 利用Java實(shí)體bean對(duì)象批量數(shù)據(jù)傳輸處理方案小結(jié)

    利用Java實(shí)體bean對(duì)象批量數(shù)據(jù)傳輸處理方案小結(jié)

    javabean是對(duì)面向?qū)ο笏枷氲囊环N具體實(shí)施的表現(xiàn),本文重點(diǎn)給大家介紹利用Java實(shí)體bean對(duì)象批量數(shù)據(jù)傳輸處理方案小結(jié),本文通過兩種方案給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • springboot如何獲取yml里面的屬性值

    springboot如何獲取yml里面的屬性值

    這篇文章主要介紹了springboot如何獲取yml里面的屬性值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • springboot3.2整合mybatis-plus詳細(xì)代碼示例

    springboot3.2整合mybatis-plus詳細(xì)代碼示例

    這篇文章主要給大家介紹了關(guān)于springboot3.2整合mybatis-plus的相關(guān)資料,Spring Boot是一個(gè)非常流行的Java Web框架,可以快速地搭建Web應(yīng)用程序,需要的朋友可以參考下
    2023-12-12
  • Java元注解Retention代碼示例介紹

    Java元注解Retention代碼示例介紹

    注解@Retention可以用來修飾注解,是注解的注解,稱為元注解。Retention注解有一個(gè)屬性value,是RetentionPolicy類型的,Enum?RetentionPolicy是一個(gè)枚舉類型,這個(gè)枚舉決定了Retention注解應(yīng)該如何去保持,也可理解為Rentention?搭配?RententionPolicy使用
    2022-08-08
  • Spring注解驅(qū)動(dòng)之BeanPostProcessor后置處理器講解

    Spring注解驅(qū)動(dòng)之BeanPostProcessor后置處理器講解

    這篇文章主要介紹了Spring注解驅(qū)動(dòng)之BeanPostProcessor后置處理器講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Java計(jì)算交集,差集,并集的方法示例

    Java計(jì)算交集,差集,并集的方法示例

    這篇文章主要介紹了Java計(jì)算交集,差集,并集的方法,結(jié)合實(shí)例形式簡單分析了java集合運(yùn)算的簡單操作技巧,需要的朋友可以參考下
    2017-10-10

最新評(píng)論