
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等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)