说明
仅供学习交流使用,
笔记作于【尚硅谷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>