spring事务管理环境搭建

转账环境搭建

1、创建数据库表,添加数据
spring事务管理环境搭建_第1张图片
image.png
2、创建service和dao完成注入的关系

(1)service:业务逻辑层
(2)dao:单独对数据库操作的层,dao层不添加业务逻辑


spring事务管理环境搭建_第2张图片
配置bean
spring事务管理环境搭建_第3张图片
service注入dao
spring事务管理环境搭建_第4张图片
dao注入模版

(3)需求:张三给李四转账1000块钱

  • 张三少1000块钱
  • 李四多1000块钱
3、代码

Service层OrdersService.java

import org.springframework.beans.factory.annotation.Autowired;

import work.zhangdoudou.Dao.OrdersDao;

public class OrdersService {
    
    @Autowired
    private OrdersDao ordersDao;
    
    /*
     * 调用dao层
     * 业务逻辑,写转账业务
     */
    public void accountMoney(String name1,String name2,Integer money) {
        //张三少1000块钱
        ordersDao.lessMoney(name1,money);
        
        //李四多1000快钱
        ordersDao.moreMoney(name2,money);
    }
}

dao层OrdersDao.java

package work.zhangdoudou.Dao;

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

public class OrdersDao {
    
    @Autowired
    private JdbcTemplate jdbcTemplate;
    /*
     * 对数据库操作,不屑业务
     */
    
    //张三少钱的方法
    public void lessMoney(String name,Integer money) {
        String sql="UPDATE account SET salary=salary-? WHERE u_name=?";
        jdbcTemplate.update(sql,money,name);
    }
    
    
    //李四多钱的方法
    public void moreMoney(String name,int money) {
        String sql="UPDATE account SET salary=salary+? WHERE u_name=?";
        jdbcTemplate.update(sql,money,name);
    }
}

配置文件applicationContext.xml



                        
    
    
    
    
    
    
    
            
            
            
            
     
    
    
    
    
    
    
        
        
    


测试类Test1.java

package work.zhangdoudou.Test;

import static org.junit.Assert.*;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import work.zhangdoudou.Service.OrdersService;

public class Test1 {

    @Test
    public void test() {
        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
        OrdersService ordersService=(OrdersService) context.getBean("ordersService");
        ordersService.accountMoney("张三","李四",1000);
    }

}
4、运行结果
spring事务管理环境搭建_第5张图片
image.png
5、存在的问题
  • 如果张三少了1000元后,出现异常,李四不会多1000元,钱丢失了
    异常代码


    spring事务管理环境搭建_第6张图片
    异常代码

    运行结果


    spring事务管理环境搭建_第7张图片
    运行结果
6、解决问题
  • 添加事务解决,如果出现异常进行回滚操作

你可能感兴趣的:(spring事务管理环境搭建)