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

Hibernate基于ThreadLocal管理Session過程解析

 更新時間:2020年10月26日 09:38:25   作者:Y_wee  
這篇文章主要介紹了Hibernate基于ThreadLocal管理Session過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

1、為什么要使用ThreadLocal管理Session

session是線程不安全的,因此在多線程環(huán)境下,session對象不能為共享對象

把Session寫成局部變量雖然可以解決線程安全問題,但是每次運行都要打開及關(guān)閉session對象,導致性能受影響

如果直接調(diào)用調(diào)用sessionfactory.openSession方法,則無法在業(yè)務(wù)層獲取session對象

2、ThreadLocal管理Session的配置

2.1、方式一

通過自定義工具類實現(xiàn)

package com.yl.utils;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

/**
 * hibernate工具類
 */
public class HibernateUtils {
  private static SessionFactory sessionFactory;
  private static ThreadLocal<Session> threadLocal=new ThreadLocal<Session>();

  static {
    //加載配置文件
    Configuration cig = new Configuration().configure();
    //創(chuàng)建工廠
    sessionFactory = cig.buildSessionFactory();
  }

  /**
   * 獲取Session對象
   */
  public static Session getSession(){
    //判斷threadlocal是否已經(jīng)存在當前線程的Session,不存在才創(chuàng)建
    Session session=threadLocal.get();
    if (session==null){
      session=sessionFactory.openSession();
      threadLocal.set(session);
    }
    return session;
  }
  
  /**
   * 關(guān)閉session
   */
  public static void close() {
    Session session = threadLocal.get();
    if (session != null) {
      session.close();
    }
    threadLocal.set(null);
  }
}

2.2、方式二

通過hibernate.cfg.xml配置文件實現(xiàn)

在hibernate.cfg.xml中加入配置

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

修改hibernate工具類代碼

package com.yl.utils;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

/**
 * hibernate工具類
 */
public class HibernateUtils {
  private static SessionFactory sessionFactory;
  
  static {
    //加載配置文件
    Configuration cig = new Configuration().configure();
    //創(chuàng)建工廠
    sessionFactory = cig.buildSessionFactory();
  }

  /**
   * 獲取Session對象
   */
  public static Session getSession(){
    return sessionFactory.getCurrentSession();
  }
}

3、備注

建議使用方式二,將threadlocal交給hibernate管理,不用自己關(guān)閉。

4、注意事項

當使用工廠創(chuàng)建對象時,如果在工廠傳session,session不能定義為全局變量;因為每個線程都要有一個自己的session,建議在構(gòu)造方法調(diào)用工具類傳入session,不要在工廠傳session

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

青铜峡市| 汶川县| 宁明县| 邢台市| 封丘县| 乌恰县| 左权县| 新民市| 绥滨县| 甘肃省| 松阳县| 阳朔县| 怀集县| 凌海市| 玛沁县| 抚远县| 南丰县| 皋兰县| 大丰市| 龙江县| 巨鹿县| 崇左市| 大化| 保德县| 广汉市| 宜阳县| 高碑店市| 六盘水市| 界首市| 德钦县| 团风县| 吉安县| 临高县| 星子县| 林口县| 龙州县| 德清县| 博爱县| 龙南县| 宾阳县| 会宁县|