zoukankan      html  css  js  c++  java
  • Hibernate框架学习(四)——事务

    一、回顾事务的概念http://www.cnblogs.com/cxq1126/p/8313600.html

    1、特性ACID:原子性、一致性、隔离性、持久性

    2、并发问题:脏读、不可重复读、幻|虚读

    3、事务的隔离级别:读未提交、读已提交、可重复读、串行化

    二、如何在Hibernate中指定数据库的隔离级别

    在主配置文件hibernate.cfg.xml中添加一行

    三、项目中如何管理事务

    规则:业务开始之前打开事务、业务执行之后提交事务,执行过程中出现异常回滚事务

    在dao层操作数据库需要用到session对象,在service层控制事务也使用了session对象,要确保dao层和service层使用的同一个session对象。

    在hibernate中确保使用同一个session的问题,hibernate已经解决了,开发人员只需要调用sf.getCurrentSession()方法即可获得与当前线程绑定的session对象。

    注意:

      1)调用sf.getCurrentSession()方法必须配合主配置中的一段配置。

     1 //测试getCurrentSession
     2 public class Demo {
     3     @Test
     4     //返回同一个session
     5     public void fun1(){
     6         Session session1 = HibernateUtils.getCurrentSession();
     7         Session session2 = HibernateUtils.getCurrentSession();
     8         
     9         System.out.println(session1==session2);    //true
    10     }
    11     @Test
    12     //返回不同的session
    13     public void fun2(){
    14         Session session1 = HibernateUtils.openSession();
    15         Session session2 = HibernateUtils.openSession();
    16         
    17         System.out.println(session1==session2);    //false
    18     }
    19 }

      2)通过getCurrentSession方法获得的session对象,当事务提交时session会自动关闭,不要手动调用close关闭,否则抛出异常。

     Service层修改:

    Dao层修改:

  • 相关阅读:
    我们是在开发产品还是项目?
    创业期的软件开发管理(一)
    由“I”到“T”
    创业期的软件开发管理(二)
    平台架构用户系统
    产品的臃肿过程
    平台架构——体系结构
    狼群的架构暗示
    如何创建一个好的索引
    哈希索引
  • 原文地址:https://www.cnblogs.com/cxq1126/p/8407103.html
Copyright © 2011-2022 走看看