兔宝宝游戏网 游戏攻略 手游攻略 sessionfactory,如何获取sessionfactory

sessionfactory,如何获取sessionfactory

时间:2025-03-13 09:17:47 作者:兔宝宝游戏网 浏览:7

sessionfactory,最近不少朋友在找如何获取sessionfactory的相关介绍,兔宝宝游戏网给大家详细的介绍一下,希望对大家有帮助。

1、sessionfactory:

Session:是应用程序与数据库之间的一个会话,是Hibernate运作的中心,持久层操作的基础。对象的生命周期、事务的管理、数据库的存取都与Session息息相关.
Session对象是通过SessionFactory构建的,Hibernate有两种获取session的方式
1、getCurrentSession()获得与当前线程绑定的session
package com.deptsystem.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
* Hibernate的帮助类,用来获取Session
*
*/
public class HibernateUtil {
//将sessionFactory设为静态,可以保证其整个应用程序中的唯一性
private static final SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
private HibernateUtil(){}; //将构造方法设为似有,只能使用“类名+静态方法”的方式调用
/**
* 获取Session工厂
* @return SessionFactory
*/
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
/**
* 获取Session
* @return Session
*/
public static Session getSession(){
return sessionFactory.getCurrentSession();
}

测试类部分代码:
public static void main(String[] args) {
Session session = HibernateUtil.getSession();//获取session
session.beginTransaction();//开始事务

User user = (User) session.get(User.class, 1);
System.out.println(user.getName());

session.getTransaction().commit();//事务提交
session.close();
}
2、openSession()打开一个新session

package com.deptsystem.util;

import org.hibernate.Session;//hibernate3的
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
* Hibernate的帮助类,用来获取Session
*
*/
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;
}
}测试类部分代码:
public static void main(String[] args) {
Session session = HibernateUtil.getSession();//获取session
session.beginTransaction();//开始事务

User user = (User) session.get(User.class, 1);
System.out.println(user.getName());

session.getTransaction().commit();//事务提交
session.close();
}
3、使用注意事项

1)openSession和getCurrentSession的区别
openSession必须关闭,currentSession在事务结束后自动关闭
openSession没有和当前线程绑定,currentSession和当前线程绑定
2)如果使用currentSession需要在hibernate.cfg.xml文件中进行配置:
a、如果是本地事务(jdbc事务)
thread
b、如果是全局事务(jta事务)
jta
全局事务:资源管理器管理和协调的事务,可以跨越多个数据库和进程。资源管理器一般使用XA 二阶段提交协议与“企业信息系统”(EIS) 或数据库进行交互。
本地事务:在单个 EIS或数据库的本地并且限制在单个进程内的事务。本地事务不涉及多个数据来源。

2、究竟该如何创建SessionFactory:

可以看得出你并没有完全理解这个类的每一步: 先仔细看下,下面说说我的体会... public class HibernateSessionFactory { private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml"; private static final ThreadLocal threadLocal = new ThreadLocal(); private static Configuration configuration = new Configuration(); private static org.hibernate.SessionFactory sessionFactory; private static String configFile = CONFIG_FILE_LOCATION; private HibernateSessionFactory() { } //这里做了个本地线程,这样做的好处是,把session的创建变成了单立模式,因为session的创建会消耗大量的内存,这样做保证Session每次只被创建一次,用完就销毁.相当于把session对象放在一个盒子中,这个盒子每次只允许放一个session对象. public static Session getSession() throws HibernateException { Session session = (Session) threadLocal.get(); if (session == null || !session.isOpen()) { if (sessionFactory == null) { rebuildSessionFactory(); } session = (sessionFactory != null) ? sessionFactory.openSession() : null; threadLocal.set(session); } return session; } //这里是读取配置文件信息,当然也可以自己写,自己写要注意第一次是openSession(),然后就是getSession(); public static void rebuildSessionFactory() { try { configuration.configure(configFile); sessionFactory = configuration.buildSessionFactory(); } catch (Exception e) { System.err .println("%%%% Error Creating SessionFactory %%%%"); e.printStackTrace(); } } public static void closeSession() throws HibernateException { Session session = (Session) threadLocal.get(); //判断盒子中是否已经存在session,存在销毁,这样做十分严谨

总结:以上内容就是针对sessionfactory,如何获取sessionfactory的详细介绍,大家可以参考一下。

标题:sessionfactory,如何获取sessionfactory
链接:http://www.qzj2.com/article/43289.html
版权:文章转载自网络,如有侵权,请联系删除!
资讯推荐
更多
海龟汤题目和答案全套恐怖高难度,细思极恐的冷门海龟汤

海龟汤题目和答案全套恐怖高难度,细思极恐的冷门海龟汤,细思极恐海龟汤大全及答案汤面:有兄弟三人,感情非常好

2025-03-13
gta5武器秘籍大全(完整版)无限子弹,gta5的武器秘籍有哪些

gta5武器秘籍大全,完整版无限子弹,gta5的武器秘籍有哪些,gta5武器全满代码是:IFWEREARCHMAN。其他秘籍:一、武

2025-03-13
梦幻西游义绝墨魂笔3x攻略(神器义绝墨魂笔之踪攻略)

梦幻西游义绝墨魂笔3x攻略,可以这么说,这个神器是3X神器挑战里最难刷的了,对于没刷过的朋友来说更难,那么怎么刷

2025-03-13
公交车里抓着摇曳的手环诗情,清晨时见雾青草沾雨露是什么歌

公交车里抓着摇曳的手环诗情,清晨时见雾青草沾雨露是什么歌,是马良的《醒着醉》里的歌词。醒着醉作词:马良作

2025-03-13