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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 好爽好粗 | 暖暖高清日本在线 | avtt天堂网手机版亚洲 | 国产免费看视频 | 日本妇人成熟免费观看18 | 挺进白嫩老师下面视频 | 精品一区二区三区免费毛片 | 狠狠的撞进去嗯啊h女强男视频 | 男人猛戳女人下部30分钟 | 欧美日韩国产最新一区二区 | 小鸟酱在线看 | 好男人影视社区www在线观看 | 日老逼| 草莓茄子丝瓜番茄小蝌蚪 | 日韩日日操 | chinesefree普通对话| 亚洲色图第四页 | 亚洲人成网站在线观看90影院 | 国产午夜精品福利久久 | 91精品国产综合久久消防器材 | 五月天在线视频观看 | 校服下的白嫩小乳尖h1v1 | 青青青在线观看国产精品 | 久久久伊人影院 | 韩国一级淫片特黄特刺激 | 男人与雌性宠物交啪啪小说 | 亚洲国产婷婷俺也色综合 | 蜜桃成熟时1997在线看免费看 | 热99在线观看 | 97香蕉超级碰碰碰久久兔费 | 男人狂躁女人下面狂叫图片 | 香蕉精品国产高清自在自线 | 色小妹在线 | 亚洲精品国产综合久久一线 | 日韩高清无砖砖区2022 | 午夜伦理:伦理片 | 激情六月丁香婷婷四房播 | 午夜影院网页 | 免费黄色片网站 | 荡女人人爱全文免费阅读 | 韩国三级hd中文字幕李采潭 |