一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Hibernate中獲取Session的兩種方式代碼示例

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

2021-03-03 13:50清清薄荷香 Java教程

這篇文章主要介紹了Hibernate中獲取Session的兩種方式代碼示例,具有一定借鑒價值,需要的朋友可以參考下。

Session:是應用程序與數據庫之間的一個會話,是Hibernate運作的中心,持久層操作的基礎.對象的生命周期/事務的管理/數據庫的存取都與Session息息相關.

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

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

HibernateUtil管理Session的工具類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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();
    }
    //關閉Session
    public static void closeSession(Session session){
        if(session!=null){
            if(session.isOpen()){
                session.close();
            }
        }
    }
    public static SessionFactory getSessionFactory(){
        return factory;
    }
}

用戶業務邏輯層

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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,所以
  * 當用戶添加失敗的時候,日志也會添加失敗。事務回滾
  * 用戶添加成功日志也會添加成功
  */
    public void addUser(User user) {
        Session session=null;
        try{
            //取得當前線程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();
        }
    }
}

日志實現類:

?
1
2
3
4
5
6
7
8
9
10
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) {
        //獲取當前線程的Session
        HibernateUtils.getSessionFactory().getCurrentSession().save(log);
    }
}

測試類

?
1
2
3
4
5
6
7
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();
?
1
2
3
  user.setName("張三");
  userManager.addUser(user);
}

注意:

1.openSession和getCurrentSession的區別?

*openSession必須關閉,currentSession在事務結束后自動關閉

*openSession沒有和當前線程綁定,currentSession和當前線程綁定

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

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

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

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

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

全局事務:資源管理器管理和協調的事務,可以跨越多個數據庫和進程。資源管理器一般使用XA二階段提交協議與“企業信息系統”(EIS)或數據庫進行交互。

本地事務:在單個EIS或數據庫的本地并且限制在單個進程內的事務。本地事務不涉及多個數據來源。

總結

以上就是本文關于Hibernate中獲取Session的兩種方式代碼示例的全部內容,希望對大家有所幫助。如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

原文鏈接:http://blog.csdn.net/yingjiebohe/article/details/8283185

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品国产免费第一区二区三区日韩 | 美女被无套进入 | 欧美成人中文字幕 | bbc japanese黑人强行 | 污漫日本E同人 | 国产成人精品.一二区 | 国产真实乱子伦xxxxchina | 草莓视频幸福宝 | 国产亚洲精品九九久在线观看 | 99热这里只有精 | 欧美久久久久久久一区二区三区 | 毛片一级免费 | 久草热8精品视频在线观看 久草草在线视视频 | 黄色aaa级片 | 亚洲午夜精品久久久久 | 狠狠干快播 | 欧美破苞合集 magnet | 国产一级持黄大片99久久 | 国产精品毛片久久久久久久 | 污到你怀疑人生 | 精品视频一区二区三区 | 免费观看欧美成人禁片 | 国产精品久久毛片完整版 | 国产欧美成人免费观看 | 国产亚洲视频网站 | 亚洲2卡三卡4卡5卡精品 | 女人张开腿让男人桶视频免费大全 | 欧美日韩久久中文字幕 | 亚洲国产AV一区二区三区四区 | 故意短裙公车被强好爽在线播放 | 美女扒开胸罩露出奶了无遮挡免费 | 欧美成人免费观看久久 | 爱福利视频一区 | 天天摸天天碰色综合网 | 国产精品嫩草影院在线看 | 99久久精品国内 | 免费特黄一级欧美大片在线看 | 先锋资源久久 | 免费在线观看网址大全 | 成人一区二区免费中文字幕 | 久久中文字幕亚洲精品最新 |