栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring5事务操作

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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();
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/682438.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号