8. Spring-事务 *** 作

8. Spring-事务 *** 作,第1张

8. Spring-事务 *** 作

事务 *** 作

一、事务概念

1. 什么是事务2. 事务的特效(ACID) 二、事务 *** 作的环境搭建

1. 建表2. 目录结构

3. 相关类的创建 三、Spring事务管理介绍

1. 注解声明式事务管理2. 事务参数

① propagation:事务传播行为② ioslation:事务隔离级别③ timeout:超时时长④ readOnly:是否只读⑤ rollbackFor:回滚⑥ noRollbackFor:不回滚 3. xml声明事务管理

一、事务概念 1. 什么是事务
    事务是数据库 *** 作最基本的单元,逻辑上一组的 *** 作,要么同时成功,要么同时失败。
2. 事务的特效(ACID)
    原子性一致性隔离性持久性
二、事务 *** 作的环境搭建 1. 建表
CREATE TABLE t_account(
	id INT PRIMARY KEY AUTO_INCREMENT,
	username VARCHAR(20),
	money INT
);

INSERT INTO t_account VALUE(NULL,'lucy',100);
INSERT INTO t_account VALUE(NULL,'mary',100);

2. 目录结构

3. 相关类的创建
    UserService类
@Service
//@Transactional(propagation = Propagation.MANDATORY,isolation = Isolation.REPEATABLE_READ,timeout = 1000)
public class UserService {

    @Autowired
    private UserDao userDao;

    //转账的方法
    public void accountMoney(){
        //try{
            //第一步 开启事务

            //第二步 进行业务 *** 作
            userDao.add();
            //模拟异常
            //int i = 10 / 0;
            userDao.reduce();
            //第三步 无异常发生提交事务

        //}catch (Exception e){
            //第四步 出现异常回滚事务

        //}
    }

}

    UserDao类
public interface UserDao {

    public void add();
    public void reduce();
}
    UserDaoImpl类
@Repository
public class UserDaoImpl implements UserDao {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public void add() {
        String sql = "update t_account set money = money + ? where username = ?";
        jdbcTemplate.update(sql,100,"lucy");
    }

    @Override
    public void reduce() {
        String sql = "update t_account set money = money - ? where username = ?";
        jdbcTemplate.update(sql,100,"mary");
    }
}
    测试类
public class UserServiceTest extends TestCase {

    public void testAccountMoney() {
        //基于注解的测试方法
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        UserService userService = context.getBean("userService", UserService.class);
        userService.accountMoney();
    }

    public void testAccountMoney1() {
        //基于配置文件的测试方法
        ApplicationContext context = new ClassPathXmlApplicationContext("bean2.xml");
        UserService userService = context.getBean("userService", UserService.class);
        userService.accountMoney();
    }
}
三、Spring事务管理介绍
    事务添加到service层。事务分为编程式事务管理和声明式事务管理,一般使用声明式事务管理。声明式事务管理,基于注解方式和基于xml配置文件方式。在Spring进行声明式事务管理,底层使用AOP原理。
1. 注解声明式事务管理
    在spring配置文件配置事务管理器
在这里插入代码片
    在spring配置文件,开启事务注解
在这里插入代码片
2. 事务参数 ① propagation:事务传播行为

@Transactional(propagation = Propagation.REQUIRES)
② ioslation:事务隔离级别

    事务的隔离性,使得多事务之间不会产生影响。

    常见的三种隔离性的问题,脏读、不可重复读、幻读。

     脏读:读取到未提交的数据。
     不可重复读:一个未提交的事务读取到另一个提交事务修改的数据。
     幻读:一个未提交的事务读取到另一个提交事务添加的数据。
     
     事务的隔离级别;	
     					脏读	  不可重复读	幻读
     read uncommitted	✓		✓		✓
     read committed				✓		✓
     repeatable read					✓
     serializable	
    
@Transactional(isolation = Isolation.REPEATABLE_READ)
③ timeout:超时时长
    事务需要在一定时间内进行提交,如果不提交则回滚。默认值-1,不设置超时时长,设置时间已秒为单位。
④ readOnly:是否只读
    读-查询 *** 作,写-增删改 *** 作。readOnly默认值为false,可写可读。设置为true,只能进行查询 *** 作
⑤ rollbackFor:回滚
    设置出现哪些异常进行回滚。
⑥ noRollbackFor:不回滚
    设置出现哪些异常不进行回滚。
3. xml声明事务管理

配置文件




   
   



   
   
      
      
      
      
      
   

   
   
      
      
   

   
   
      
      
   

   
   
      
      
         
         
      
   

   
   
      
      
      
      
   


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5719183.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存