现在的位置: 首页 > 综合 > 正文

Hibernate中两种获取Session的方式 Hibernate中两种获取Session的方式

2013年10月02日 ⁄ 综合 ⁄ 共 3048字 ⁄ 字号 评论关闭

Hibernate中两种获取Session的方式

本文转自:http://blog.csdn.net/yingjiebohe/article/details/8283185

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

  Session对象是通过SessionFactory构建的,下面举个例子来介绍Hibernate两种获取session的方式。

  日志,是编程中很常见的一个关注点.用户在对数据库进行操作的过程需要将这一系列操作记录,以便跟踪数据库的动态.那么一个用户在向数据库插入一条记录的时候,就要向日志文件中记录一条记录,用户的一系列操作都要在一个Session中进行,否则这就成为了两个线程.不能保证同步.看下面的代码

     HibernateUtil管理Session的工具类

  

  1. package com.bjpowernode.usermgr.util;  
  2.   
  3. import org.hibernate.Session;//hibernate3的  
  4. import org.hibernate.SessionFactory;  
  5. import org.hibernate.cfg.Configuration;  
  6.   
  7. public class HibernateUtils {  
  8.    private static SessionFactory factory;  
  9.       
  10.    static{  
  11.            try{  
  12.             //读取hibernate.cfg.xml文件  
  13.             Configuration cfg=new Configuration().configure();  
  14.                
  15.             //建立SessionFactory  
  16.             factory=cfg.buildSessionFactory();  
  17.      
  18.            }catch(Exception e){  
  19.               e.printStackTrace();   
  20.            }  
  21.    }    
  22.      
  23.       //获得开启着的Session  
  24.    public static Session getSession(){  
  25.        return factory.openSession();  
  26.    }  
  27.      
  28.       //关闭Session  
  29.    public static void closeSession(Session session){  
  30.        if(session!=null){  
  31.            if(session.isOpen()){  
  32.                session.close();  
  33.            }  
  34.        }  
  35.    }  
  36.      
  37.    public static SessionFactory getSessionFactory(){  
  38.        return factory;  
  39.    }  
  40. }  
  1. 用户业务逻辑层  
  2. package com.bjpowernode.usermgr.manager;  
  3.   
  4. import java.util.Date;  
  5.   
  6. import org.hibernate.Session;  
  7.   
  8. import com.bjpowernode.usermgr.domain.Log;  
  9. import com.bjpowernode.usermgr.domain.User;  
  10. import com.bjpowernode.usermgr.util.HibernateUtils;  
  11.   
  12. public class UserManagerImpl implements UserManager {  
  13.   
  14.       /** 
  15.     * 添加用户和添加日志都使用了同一个Session,所以 
  16.     * 当用户添加失败的时候,日志也会添加失败。事务回滚 
  17.     * 用户添加成功日志也会添加成功 
  18.     */  
  19.     public void addUser(User user) {  
  20.           
  21.         Session session=null;  
  22.         try{  
  23.             //取得当前线程Session  
  24.             session=HibernateUtils.getSessionFactory().getCurrentSession();  
  25.             session.beginTransaction();  
  26.               
  27.             //保存用户  
  28.             session.save(user);  
  29.               
  30.             Log log=new Log();  
  31.             log.setType("操作日志");  
  32.             log.setTime(new Date());  
  33.             log.setDetail("XXX");  
  34.               
  35.             LogManager logManager=new LogManagerImpl();  
  36.             //保存日志  
  37.             logManager.addLog(log);  
  38.               
  39.             session.getTransaction().commit();  
  40.               
  41.         }catch(Exception e){  
  42.             e.printStackTrace();  
  43.             session.getTransaction().rollback();  
  44.         }  
  45.     }  
  46.   
  47. }  
  48.   
  49. 日志实现类:  
  50. package com.bjpowernode.usermgr.manager;  
  51.   
  52. import org.hibernate.Session;  
  53.   
  54. import com.bjpowernode.usermgr.domain.Log;  
  55. import com.bjpowernode.usermgr.util.HibernateUtils;  
  56.   
  57. public class LogManagerImpl implements LogManager {  
  58.   
  59.   
  60.     public void addLog(Log log) {  
  61.           
  62.         //获取当前线程的Session  
  63.         HibernateUtils.getSessionFactory().getCurrentSession().save(log);  
  64.   
  65.     }  

抱歉!评论已关闭.