hibernate里getSession()方法是抽象方法如何获取session的
2015-12-03 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
关注
展开全部
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事务)
<propertyname="hibernate.current_session_context_class">thread</property>
b、如果是全局事务(jta事务)
<propertyname="hibernate.current_session_context_class">jta</property>
全局事务:资源管理器管理和协调的事务,可以跨越多个数据库和进程。资源管理器一般使用XA 二阶段提交协议与“企业信息系统”(EIS) 或数据库进行交互。
本地事务:在单个 EIS或数据库的本地并且限制在单个进程内的事务。本地事务不涉及多个数据来源。
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事务)
<propertyname="hibernate.current_session_context_class">thread</property>
b、如果是全局事务(jta事务)
<propertyname="hibernate.current_session_context_class">jta</property>
全局事务:资源管理器管理和协调的事务,可以跨越多个数据库和进程。资源管理器一般使用XA 二阶段提交协议与“企业信息系统”(EIS) 或数据库进行交互。
本地事务:在单个 EIS或数据库的本地并且限制在单个进程内的事务。本地事务不涉及多个数据来源。
展开全部
SessionFactory sessionFactory=(SessionFactory) new Configuration().configure().buildSessionFactory();
Session session=sessionFactory.getCurrentSession();
首先获取配置文件信息,创建SessionFactory,通过
sessionFactory.getCurrentSession();
就可以获得一个session。
你说的getSssion()(其实是写好的一个openSession()),是通过以下方式实现的:
package com.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
* sessionFactory工具类
* @author lincc
*
*/
public class SessionFactoryUtil {
//静态sessionFactory只创建一次
private static SessionFactory sessionFactory=null;
static{
try{
sessionFactory=new Configuration().configure().buildSessionFactory();
}catch(Exception e){
e.printStackTrace();
}
}
/**
* 打开session
* @return
*/
public static Session getSession(){
return sessionFactory.openSession();
}
/**
* 关闭session
* @param session
*/
public static void closeSession(Session session){
if(session!=null){
if(session.isOpen()){
session.close();
}
}
}
}
Session session=sessionFactory.getCurrentSession();
首先获取配置文件信息,创建SessionFactory,通过
sessionFactory.getCurrentSession();
就可以获得一个session。
你说的getSssion()(其实是写好的一个openSession()),是通过以下方式实现的:
package com.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
* sessionFactory工具类
* @author lincc
*
*/
public class SessionFactoryUtil {
//静态sessionFactory只创建一次
private static SessionFactory sessionFactory=null;
static{
try{
sessionFactory=new Configuration().configure().buildSessionFactory();
}catch(Exception e){
e.printStackTrace();
}
}
/**
* 打开session
* @return
*/
public static Session getSession(){
return sessionFactory.openSession();
}
/**
* 关闭session
* @param session
*/
public static void closeSession(Session session){
if(session!=null){
if(session.isOpen()){
session.close();
}
}
}
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
SessionFactory sessionFactory=(SessionFactory) new Configuration().configure().buildSessionFactory();
Session session=sessionFactory.getCurrentSession();
sessionFactory.getCurrentSession();
Session session=sessionFactory.getCurrentSession();
sessionFactory.getCurrentSession();
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
加载配置文件,创建session工厂,获得一个session
或者是session=HibernateFactory.getSession();
或者是session=HibernateFactory.getSession();
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询