Spring5事务 *** 作

Spring5事务 *** 作,第1张

Spring5事务 *** 作 什么是事务?

        事务是数据库 *** 作的最基本单元,是逻辑上的一组 *** 作,要么都成功,如果有一个失败,所有都失败。银行转账例子就是一个典型的事务场景。lucy转账100给marry。lucy少100,marry多100,这叫做逻辑上的一组 *** 作,当两个 *** 作都完成后才构成我们的转账。如果过程中出现了异常,转给marry的钱还没有转过去,要保证此时lucy的钱不会少,marry的钱也不会多,即要么都成功,要么都失败。

事务的4大特性(ACID)
  1. 原子性:值得是转账这个过程不可分割,要么都成功(lucy少100,marry多100),要么都失败(lucy没有少100,marry也没有多100)
  2. 一致性: *** 作之前和 *** 作之后的总量是不变的。(lucy和marry都有100,两人加一起一共有200。lucy少100,变为0;marry多100,变为200;
    但是总量0+200=200, *** 作之后的总量跟 *** 作之前的总量仍然保持一致,这就是一致性。
  3. 隔离性:多事务 *** 作的时候,不会产生影响。(两人都去 *** 作同一条记录,过程中不产生影响)。
  4. 持久性:事务提交之后,表中数据真正发生变化。
搭建事务 *** 作的环境(搭建银行转账例子的事务 *** 作环境)

        JavaEE三层机构:WEB Service(业务逻辑) Dao(对数据库的 *** 作)
Dao层:
创建两个方法
1.多钱的方法
2.少钱的方法
Service层:
创建转账的方法:
在转账方法中分别调用dao中的少钱和多钱方法,实现lucy少钱,marry多钱的转账 *** 作。

  1. 创建数据库,创建表,添加记录。

user_db 数据库中的 t_accout表
id  varchar 20长度 主键
username  varchar 50长度
money int 
记录:
1 lucy 1000
2 marry 1000

 

        2.创建service,创建dao接口和dao实现类,完成对象创建和注入关系,以及连接池的配置。

service中注入dao,dao中注入JdbcTemplate,在JdbcTemplate中注入DataSource
        3.在dao中创建两个方法:多钱的方法和少钱的方法;在service里面创建转账的方法,
方法体调用dao中的两个方法

 

//bean.xml


    
    

    
    
        
        

        
        
    

    
    
        
        
    


package com.company.dao;

public interface UserDao {
    public void addMoney();
    public void reduceMoney();
}
package com.company.dao;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

@Repository
public class UserDaoImpl implements UserDao {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public void addMoney() {
        //lucy转账100给marry,marry+100
        String sql = "update tb_account set money = money + ? where username = ?";
        jdbcTemplate.update(sql, 100, "marry");
    }

    @Override
    public void reduceMoney() {
        //lucy转账100给marry,lucy-100
        String sql = "update tb_account set money = money - ? where username = ?";
        jdbcTemplate.update(sql, 100, "lucy");
    }
}
package com.company.service;

import com.company.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    //在Service中注入Dao
    @Autowired
    private UserDao userDao;

    public void accountMoney() {
        //lucy少100
        userDao.reduceMoney();
        //marry多100
        userDao.addMoney();
    }

}
package com.company.test;

import com.company.service.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class testSpring5 {
    @Test
    public void testAccount() {
        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
        UserService userService = context.getBean("userService", UserService.class);
        userService.accountMoney();
    }
}

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存