第1集 Spring 常⻅的事务管理-⾯试常考点
简介:讲解Spring常⻅的事务管理
- 事务:多个操作,要么同时成功,要么失败后⼀起回滚
-
具备 ACID 四种特性
-
Atomic (原⼦性)Consistency (⼀致性)Isolation (隔离性)Durability (持久性)
-
-
- 你知道常⻅的Spring事务管理⽅式吗
-
编程式事务管理 :
* 代码中调⽤ beginTransaction() 、 commit() 、 rollback() 等事务管理相关的⽅法,通过TransactionTempalte ⼿动管理事务 ( ⽤的少 )
声明式事务管理:
* 通过AOP实现,可配置⽂件⽅式或者注解⽅式实现事务的管理控制(⽤的多)
- 你知道声明式事务管理本质吗:
本质是对⽅法前后进⾏拦截,底层是建⽴在 AOP 的基础之上
在⽬标⽅法开始之前创建或者加⼊⼀个事务,在执⾏完⽬标⽅法之后根据执⾏情况提交 或者回滚事务
第2集 Spring事务的传播属性和隔离级别
简介:讲解
Spring
事务的传播属性和隔离级别
- 事物传播⾏为介绍:
-
如果在开始当前事务之前,⼀个事务上下⽂已经存在,此时有若⼲选项可以指定⼀个事务性⽅法的执⾏⾏为
-
@Transactional(propagation=Propagation.REQUIRED) 如果有事务 , 那么加⼊事务 , 没有的话新建⼀个( 默认情况下 )@Transactional(propagation=Propagation.NOT_SUPPORTED) 不为这个⽅法开启事务@Transactional(propagation=Propagation.REQUIRES_NEW) 不管是否存在事务 , 都创建⼀个新的事务, 原来的挂起 , 新的执⾏完毕 , 继续执⾏⽼的事务@Transactional(propagation=Propagation.MANDATORY) 必须在⼀个已有的事务中执⾏, 否则抛出异常@Transactional(propagation=Propagation.NEVER) 必须在⼀个没有的事务中执⾏ , 否则抛出异常( 与 Propagation.MANDATORY 相反 )@Transactional(propagation=Propagation.SUPPORTS) 如果其他 bean 调⽤这个⽅法 ,在其他bean 中声明事务 , 那就⽤事务 . 如果其他 bean 没有声明事务 , 那就不⽤事务 .@Transactional(propagation=Propagation.NESTED) 如果当前存在事务,则创建⼀个 事务作为当前事务的嵌套事务来运⾏; 如果当前没有事务,则该取值等价于Propagation.REQUIRED 。
-
-
- 事务隔离级别: 是指若⼲个并发的事务之间的隔离程度
-
@Transactional(isolation = Isolation.READ_UNCOMMITTED) 读取未提交数据 ( 会出现脏读 , 不可重复读) 基本不使⽤
-
@Transactional(isolation = Isolation.READ_COMMITTED) 读取已提交数据 ( 会出现不可重复读和幻读)@Transactional(isolation = Isolation.REPEATABLE_READ) 可重复读 ( 会出现幻读 )@Transactional(isolation = Isolation.SERIALIZABLE) 串⾏化
-
MYSQL: 默认为REPEATABLE_READ级别
第3集 新版SpringBoot-Spring-Mybatsi事务控制讲解
简介:新版SSM @Transactional 事务控制讲解
快速创建SpringBoot+Spring+Mybatsi项⽬
https://start.spring.io/
连接打通数据库
#配置数据源 spring.datasource.driver-class-name =com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mybatis? useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=utf-8&useSSL=false spring.datasource.username=root spring.datasource.password=root #使⽤阿⾥巴巴druid数据源,默认使⽤⾃带的 #spring.datasource.type =com.alibaba.druid.pool.DruidDataSource #开启控制台打印sql mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
Maven插件
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--引入JDBC-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
<!--导入mybatis依赖包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.4</version>
</dependency>
</dependencies>
控制层:
@RestController
@RequestMapping("api/v1/pri/videoOrder")
public class VideoOrderController {
@Autowired
private VideoOrderService videoOrderService;
//下单操作
@RequestMapping("save")
public JsonData Save(){
VideoOrder videoOrder = new VideoOrder();
videoOrder.setUserId(6);
videoOrder.setVideoId(6);
videoOrder.setVideoTitle("小牛找工作");
int save = videoOrderService.save(videoOrder);
JsonData jsonData= save == 1 ? JsonData.JsonDataBuild("插入成功") : JsonData.JsonDataError("",-100,"插入失败");
return jsonData;
}
}
服务层:在业务中插入事务
public interface VideoOrderService {
int save(VideoOrder videoOrder);
}
@Service
@Transactional(propagation= Propagation.REQUIRED) //开启事务
public class VideoOrderServiceImpl implements VideoOrderService {
@Autowired
private VideoOrderMapper videoOrderMapper;
@Override
public int save(VideoOrder videoOrder) {
// int i = 1/ 0;
return videoOrderMapper.save(videoOrder);
}
}
Mapper:
@Repository
public interface VideoOrderMapper {
/**
* 关联查询
*/
List<VideoOrder> findVideoOrderList();
//下单操作
@Insert("insert into video_order(video_id,user_id,video_title) values(#{VideoId},#{userId},#{videoTitle})")
int save(VideoOrder videoOrder);
}
启动类:
@SpringBootApplication
@MapperScan("com.example.ssmdemo.Mapper")
@EnableTransactionManagement //开启事务注解
public class SsmdemoApplication {
public static void main(String[] args) {
SpringApplication.run(SsmdemoApplication.class, args);
}
}
运行结果:
第4集 新版SpringBoot-Spring-Mybatsi课程总结和后续内容预告
简介:新版
SSM
课程总结和后续内容预告
新版
SSM
课程总结:
SpringBoot
Mybatis
Spring
综合项⽬实战规划
后端
SpringBoot + Spring5 + Mybatis + Maven +IDEA +MySql + JWT + Guava + Jmeter5.X
前端
Vue + Vuex + Axios + CubeUI
阿⾥云
ECS CentOS7 + Nginx +
域名绑定