怎样获取hibernate的session

怎样获取hibernate的session,第1张

Session:是应用程序与数据库之间的一个会话,是Hibernate运作的中心,持久层 *** 作的基础。对象的生命周期、事务的管理、数据库的存取都与Session息息相关

Session对象是通过SessionFactory构建的,Hibernate有两种获取session的方式

1、getCurrentSession()获得与当前线程绑定的session

package comdeptsystemutil;

import orghibernateSession;

import orghibernateSessionFactory;

import orghibernatecfgConfiguration;

/

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 sessionFactorygetCurrentSession();

}

测试类部分代码:

public static void main(String[] args) {

Session session = HibernateUtilgetSession();//获取session

sessionbeginTransaction();//开始事务

User user = (User) sessionget(Userclass, 1);

Systemoutprintln(usergetName());

sessiongetTransaction()commit();//事务提交

sessionclose();

}

2、openSession()打开一个新session

package comdeptsystemutil;

import orghibernateSession;//hibernate3的

import orghibernateSessionFactory;

import orghibernatecfgConfiguration;

/

Hibernate的帮助类,用来获取Session

/

public class HibernateUtils {

private static SessionFactory factory;

static{

try{

//读取hibernatecfgxml文件

Configuration cfg=new Configuration()configure();

//建立SessionFactory

factory=cfgbuildSessionFactory();

}catch(Exception e){

eprintStackTrace();

}

}

//获得开启着的Session

public static Session getSession(){

return factoryopenSession();

}

//关闭Session

public static void closeSession(Session session){

if(session!=null){

if(sessionisOpen()){

sessionclose();

}

}

}

public static SessionFactory getSessionFactory(){

return factory;

}

}测试类部分代码:

public static void main(String[] args) {

Session session = HibernateUtilgetSession();//获取session

sessionbeginTransaction();//开始事务

User user = (User) sessionget(Userclass, 1);

Systemoutprintln(usergetName());

sessiongetTransaction()commit();//事务提交

sessionclose();

}

3、使用注意事项

1)openSession和getCurrentSession的区别

openSession必须关闭,currentSession在事务结束后自动关闭

openSession没有和当前线程绑定,currentSession和当前线程绑定

2)如果使用currentSession需要在hibernatecfgxml文件中进行配置:

a、如果是本地事务(jdbc事务)

<propertyname="hibernatecurrent_session_context_class">thread</property>

b、如果是全局事务(jta事务)

<propertyname="hibernatecurrent_session_context_class">jta</property>

全局事务:资源管理器管理和协调的事务,可以跨越多个数据库和进程。资源管理器一般使用XA 二阶段提交协议与“企业信息系统”(EIS) 或数据库进行交互。

本地事务:在单个 EIS或数据库的本地并且限制在单个进程内的事务。本地事务不涉及多个数据来源。

一般情况下 用SessiongetAttibute(String key)来获得Session对象中含有的关键字是key的对象。key 是通过SessionsetAttibute(String key ,Object obj)自己设定的一个索引关键字!Session对象怎么来的的呢 可以通过requestgetSession()来获得!

所以现在就明白了:通过requestgetsession()获得session 对象 再调用它的getAttibute(String key)方法来获得含有关键字“PASSPORT_NICKNAME”的对象

例子:

UserID = (String) requestgetSession()getAttribute("UserID");

方法一:使用servlet-api

[java] view plain copy print

@Controller

public class ManagerController {

@Resource

private ManagerService managerServiceImpl;

@RequestMapping(value = "manager/logindo",method = RequestMethodGET)

public ModelAndView login(ManagerModel managerModel,>

Servlet中在service方法中会有>

以上就是关于怎样获取hibernate的session全部的内容,包括:怎样获取hibernate的session、大神们,请教下,java如何获取session的东西、spring怎么获取session等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9267026.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存