这期内容当中小编将会给大家带来有关使用Hibernate怎么对Session进行获取,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
Session:是应用程序与数据库之间的一个会话,是Hibernate运作的中心,持久层操作的基础.对象的生命周期/事务的管理/数据库的存取都与Session息息相关.
Session对象是通过SessionFactory构建的,下面举个例子来介绍Hibernate两种获取session的方式。
日志,是编程中很常见的一个关注点.用户在对数据库进行操作的过程需要将这一系列操作记录,以便跟踪数据库的动态.那么一个用户在向数据库插入一条记录的时候,就要向日志文件中记录一条记录,用户的一系列操作都要在一个Session中进行,否则这就成为了两个线程.不能保证同步.看下面的代码
HibernateUtil管理Session的工具类
package com.bjpowernode.usermgr.util;import org.hibernate.Session;//hibernate3的 import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;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;}}
用户业务逻辑层
package com.bjpowernode.usermgr.manager;import java.util.Date;import org.hibernate.Session;import com.bjpowernode.usermgr.domain.Log;import com.bjpowernode.usermgr.domain.User;import com.bjpowernode.usermgr.util.HibernateUtils;public class UserManagerImpl implements UserManager {public void addUser(User user) {Session session=null;try{//取得当前线程Session session=HibernateUtils.getSessionFactory().getCurrentSession();session.beginTransaction();//保存用户 session.save(user);Log log=new Log();log.setType("操作日志");log.setTime(new Date());log.setDetail("XXX");LogManager logManager=new LogManagerImpl();//保存日志 logManager.addLog(log);session.getTransaction().commit();}catch(Exception e){e.printStackTrace();session.getTransaction().rollback();}}}
日志实现类:
package com.bjpowernode.usermgr.manager;import org.hibernate.Session;import com.bjpowernode.usermgr.domain.Log;import com.bjpowernode.usermgr.util.HibernateUtils;public class LogManagerImpl implements LogManager {public void addLog(Log log) {//获取当前线程的Session HibernateUtils.getSessionFactory().getCurrentSession().save(log);}}
测试类
package com.bjpowernode.usermgr.manager;import junit.framework.TestCase;import com.bjpowernode.usermgr.domain.User;public class UserManagerImplTest extends TestCase {public void testAddUser() {UserManager userManager=new UserManagerImpl();User user=new User();
user.setName("张三"); userManager.addUser(user); }
注意:
openSession和getCurrentSession的区别?
*openSession必须关闭,currentSession在事务结束后自动关闭
*openSession没有和当前线程绑定,currentSession和当前线程绑定
如果使用currentSession需要在hibernate.cfg.xml文件中进行配置:
*如果是本地事务(jdbc事务)
<propertyname="hibernate.current_session_context_class">thread</property>
*如果是全局事务(jta事务)
<propertyname="hibernate.current_session_context_class">jta</property>
全局事务:资源管理器管理和协调的事务,可以跨越多个数据库和进程。资源管理器一般使用XA二阶段提交协议与“企业信息系统”(EIS)或数据库进行交互。
本地事务:在单个EIS或数据库的本地并且限制在单个进程内的事务。本地事务不涉及多个数据来源。
上述就是小编为大家分享的使用Hibernate怎么对Session进行获取了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网行业资讯频道。