五、事务操作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>
相关文章
|
11月前
|
Java 程序员 API
Java循环操作哪个快?
本文探讨了Java中Stream API与传统for循环的性能对比及适用场景。作者通过实际案例分析,指出在某些情况下,过度使用Stream API会导致代码可读性和维护性下降。测试结果显示,在数据量较小的情况下,普通for循环的性能优于Stream API,尤其是在涉及多次类似操作时。因此,建议在开发中根据具体需求选择合适的遍历方式,以提高代码的可读性和性能。
238 5
Java循环操作哪个快?
|
11月前
|
监控 搜索推荐 API
亚马逊商品API接口:运用及收益
作为全球最大的电商平台之一,亚马逊不仅提供了丰富的商品选择,还通过其开放平台为开发者提供了多种API接口,特别是商品详情API接口。本文将深入探讨该接口的运用及其带来的商业机会和收益,包括提高用户体验、降低运营成本、增强市场竞争力和创新业务模式等方面。
243 7
|
12月前
|
JavaScript 测试技术 API
跟随通义灵码一步步升级vue2(js)项目到vue3版本
Vue 3 相较于 Vue 2 在性能、特性和开发体验上都有显著提升。本文介绍了如何利用通义灵码逐步将 Vue 2 项目升级到 Vue 3,包括备份项目、了解新特性、选择升级方式、升级依赖、迁移组件和全局 API、调整测试代码等步骤,并提供了注意事项和常见问题的解决方案。
892 4
|
人工智能 弹性计算 算法
【Hello AI】AI加速器Deepytorch-面向生成式AI和大模型场景
Deepytorch作为阿里云自研的AI加速器,面向生成式AI和大模型场景,提供了训练和推理加速能力。
【Hello AI】AI加速器Deepytorch-面向生成式AI和大模型场景
|
Go
Golang语言基础数据类型之整型
这篇文章详细介绍了Go语言中的整型数据类型,包括各种有符号和无符号整数类型、特殊整型如int、uint、uintptr、rune和byte,以及如何在程序中使用这些类型和它们所占的内存空间大小。
170 7
|
存储 数据处理 C语言
NumPy 通用函数(ufunc):高性能数组运算的利器
NumPy的通用函数(ufunc)提供高性能的逐元素运算,支持向量化操作和广播机制,能应用于数组的数学、逻辑和比较运算。ufunc可提高计算速度,避免低效的循环,并允许自定义函数以满足特定需求。例如,ufunc实现加法比循环更高效。通过`frompyfunc`可创建自定义ufunc。判断函数是否为ufunc,可检查其类型是否为`numpy.ufunc`。ufunc练习包括数组的平方、平方根、元素积及性能对比。
249 0
|
存储 运维 数据处理
数据库的未来发展?
【7月更文挑战第4天】数据库的未来发展?
117 9
|
开发框架 SpringCloudAlibaba Java
Spring Boot自动配置原理详解和自定义封装实现starter
我们一直在强调`Spring Boot`能成为当下主流首选开发框架的主要原因在于其核心思想:**约定大于配置,自动配置,条件装配**。基于这些特性使得`Spring Boot`集成其他框架非常简单快捷
489 1
 Spring Boot自动配置原理详解和自定义封装实现starter
|
IDE 数据可视化 开发工具
R语言教程
R语言教程
489 0
R语言教程
|
安全 Cloud Native 搜索推荐
中国 IDaaS 发展趋势
3月9日,阿里云宣布 IDaaS 重磅升级,在发布会上,阿里云 IDaaS GTM 负责人王建军分享了中国 IDaaS 发展趋势,IDaaS 将繁杂的身份安全能力服务化,极大的降低了企业的使用门槛。随着零信任理念的全面推广,中国IDaaS市场将进入爆炸式增长阶段,云原生、低门槛、海量应用对接的IDaaS平台,将成为企业数字化的关键基础设施。 限时免费体验 IDaaS :https://www.aliyun.com/product/idaas
中国 IDaaS 发展趋势