五、事务操作1

简介: 五、事务操作1

说明

仅供学习交流使用,
笔记作于
【尚硅谷Spring5框架教程(idea版)-哔哩哔哩】

五、事务操作

事务概念

1、什么是事务

(1)事务是数据库操作最基本单元,逻辑上一组操作,要么都成功,如果有一个失败所有操作都失败

(2)典型场景:银行转账

  • lucy 转账100元给 mary
  • lucy少100,mary多100

2、事务特性(ACID)

(1)原子性

(2)一致性

(3)隔离性

(4)持久性

事务操作(搭建事务操作环境)



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





2、创建service,搭建dao,完成对象创建和注入关系

(1)service注入dao,在dao注入JdbcTemplate,在JdbcTemplate注入DataSource

新建模块spring5_txdemo1/service/UserService
package com.atguigu.spring5.service;
import com.atguigu.spring5.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
    //注入dao
    @Autowired
    private UserDao userDao;
}
dao/UseDao
package com.atguigu.spring5.dao;
public interface UserDao {
}
dao/UseDaoImpl
package com.atguigu.spring5.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;
}

3、在dao创建两个方法,多钱和少钱的方法,在service创建方法(转账的方法)

UserDaoImpl
//lucy转账100给mary
    //少钱
    @Override
    public void reduceMoney() {
        String sql="update t_account set money=money-? where username=?";
        jdbcTemplate.update(sql,100,"lucy");
    }
    //多钱
    @Override
    public void addMoney() {
        String sql="update t_account set money=money+? where username=?";
        jdbcTemplate.update(sql,100,"mary");
    }
UserService
    //转账的方法
    public void accountMoney(){
        //lucy少100
        userDao.reduceMoney();
        //mary多100
        userDao.addMoney();
    }
test/testTx
package com.atguigu.spring5.test;
import com.atguigu.spring5.service.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class testTX {
    @Test
    public void testAccount(){
        ApplicationContext context=new ClassPathXmlApplicationContext("bean1.xml");
        UserService userService = context.getBean("userService", UserService.class);
        userService.accountMoney();
    }
}

4、上面代码,如果正常执行没有问题的,但是如果代码执行过程中出现异常,有问题



(1)上面问题如何解决呢?

  • 使用事务进行解决

(2)事务操作过程


事务操作(Spring事务管理介绍)

1、事务添加到JavaEE三层结构里面Service层(业务逻辑层)

2、在Spring进行事务管理操作
(1)有两种操作:编程式事务管理和声明式事务管理(使用)

3、声明式事务管理

(1)基于注解方式

(2)基于xml配置文件方式

4、在Spring进行声明式事务管理,底层使用AOP原理

5、Spring事务管理API

(1)提供一个接口,代表事务管理器,这个接口针对不同的框架提供不同的实现类



事务操作(注解声明式事务管理)

1、在spring配置文件配置事务管理器

bean1.xml
 <!--创建事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!--注入数据源-->
        <property name="dataSource" ref="dataSource"></property>
    </bean>
相关文章
|
4月前
|
SQL Oracle 关系型数据库
第7章 事务
第7章 事务
27 0
|
XML Java 数据格式
五、事务操作2
五、事务操作2
66 0
|
6月前
|
存储 Java 中间件
事务一致性测试
事务一致性测试
52 0
|
6月前
|
SQL 前端开发 大数据
什么是大事务?以及大事务产生的问题
什么是大事务?以及大事务产生的问题
189 0
|
人工智能 关系型数据库 MySQL
事务详解
事务是逻辑上的一组操作,要么都执行,要么都不执行。
71 0
|
存储 Oracle 固态存储
深入理解事务
事务将应用程序的多个读、写操作捆绑在一起成为一个逻辑执行单元。即事务中的所有读写是一个执行的整体,整 个事务要么成功(提交)、要么失败(中止 或者 回滚)。如果失败,应用程序可以安全地重试。
16436 0
深入理解事务
|
SQL 存储 关系型数据库
|
SQL Java 大数据
事务详解(2)
你好看官,里面请!今天笔者讲的是事务。不懂或者觉得我写的有问题可以在评论区留言,我看到会及时回复。 注意:本文仅用于学习参考,不可用于商业用途,如需转载请跟我联系。
167 1
|
SQL Java 数据库
【事务与并发】- 不同事务读取相同数据问题
在加了事务的接口中,不同的业务或者是出现并发的时候,发现了一些SQL读取问题,两个都被事务包裹的方法,各自是隔离的,如果一方的事务延时提交,就会导致另一方读取出来的数据相同,并不是修改后的数据。
127 0
|
数据库
什么时候需要使用事务
什么时候需要使用事务
599 0