当前位置: 首页 > news >正文

简单网站建设教学视频平台运营

简单网站建设教学视频,平台运营,长春做网站选长春万网,2008iis7怎么搭建网站概念 在MySQL中介绍过,当同一时间出现一起读写数据的情况,可能会导致最终的结果出错,因此可以使用事务来提高隔离级别 而Spring中也可以实现事务 手动添加事务 使用SpringBoot中的DataSourceTransactionManager对象可以获取事务&#xff0…

概念

在MySQL中介绍过,当同一时间出现一起读写数据的情况,可能会导致最终的结果出错,因此可以使用事务来提高隔离级别
而Spring中也可以实现事务

手动添加事务

使用SpringBoot中的DataSourceTransactionManager对象可以获取事务,提交事务,回滚事务

TransactionDefinition是事务的属性,在获取事务时需要传入这个参数

而TransactionStatus则是在获取事务时获取的对象,最终回滚时使用

@RestController
@RequestMapping("url")
public class 实现类 {@Autowiredprivate DataSourceTransactionManager transactionManager;@Autowiredprivate TransactionDefinition transactionDefinition;@RequestMapping("url")public 相关方法() {//开启事务TransactionStatus transactionStatus =transactionManager.getTransaction(transactionDefinition);//处理事务//回滚事务transactionManager.rollback(transactionStatus);}

例如:

@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@Autowiredprivate DataSourceTransactionManager transactionManager;@Autowiredprivate TransactionDefinition transactionDefinition;@RequestMapping("/add")public int add(UserInfo userInfo) {if (userInfo == null || !StringUtils.hasLength(userInfo.getUsername()) ||!StringUtils.hasLength(userInfo.getPassword())) {return 0;}//开启事务TransactionStatus transactionStatus =transactionManager.getTransaction(transactionDefinition);int result = userService.add(userInfo);//回滚事务transactionManager.rollback(transactionStatus);return result;}
}

在页面中,传输了参数username = 1, password = 1
但是在数据库中,并没有出现这行数据
在这里插入图片描述

自动添加事务

使用@Transactional注解可以快速添加事务

@Transactional
@RequestMapping("/insert")
public Integer insert(UserInfo userInfo) {if (userInfo == null || !StringUtils.hasLength(userInfo.getUsername()) ||!StringUtils.hasLength(userInfo.getPassword())) {return 0;}int result = userService.add(userInfo);}return result;
}

如果没有异常,那么会自动提交事务,如果有异常,事务会进行回滚

例如:在类中添加空指针异常
如果没有添加@Transactional那么在异常出现前数据已经上传到数据库

@RequestMapping("/insert")
public Integer insert(UserInfo userInfo) {if (userInfo == null || !StringUtils.hasLength(userInfo.getUsername()) ||!StringUtils.hasLength(userInfo.getPassword())) {return 0;}int result = userService.add(userInfo);int num = 1 / 0;return result;
}

在这里插入图片描述
在这里插入图片描述
而加了@Transactional注解,就可以自动回滚事务,数据库中就没有这行数据了
在这里插入图片描述
在这里插入图片描述
而如果我们添加了try,catch语句,spring就不会感知到异常的存在了,也就不会进行事务的回滚了

@Transactional //声明式事务(没有错误自动提交)
@RequestMapping("/insert")
public Integer insert(UserInfo userInfo) {if (userInfo == null || !StringUtils.hasLength(userInfo.getUsername()) ||!StringUtils.hasLength(userInfo.getPassword())) {return 0;}int result = userService.add(userInfo);try{int num = 1 / 0;} catch (Exception e){e.printStackTrace()}return result;
}

在这里插入图片描述
在这里插入图片描述
如果我们还想要事务进行自动回滚,那么可以使用throw将异常抛出,这样spring就能再次感知到异常的存在了

@Transactional //声明式事务(没有错误自动提交)
@RequestMapping("/insert")
public Integer insert(UserInfo userInfo) {if (userInfo == null || !StringUtils.hasLength(userInfo.getUsername()) ||!StringUtils.hasLength(userInfo.getPassword())) {return 0;}int result = userService.add(userInfo);try{int num = 10 / 0;} catch (Exception e){e.printStackTrace();throw e;}return result;
}

在这里插入图片描述
在这里插入图片描述

如果不想要页面出现报错信息,那么可以不添加throw语句,而是手动回滚事务

@Transactional //声明式事务(没有错误自动提交)
@RequestMapping("/insert")
public Integer insert(UserInfo userInfo) {if (userInfo == null || !StringUtils.hasLength(userInfo.getUsername()) ||!StringUtils.hasLength(userInfo.getPassword())) {return 0;}int result = userService.add(userInfo);try{int num = 10 / 0;} catch (Exception e){e.printStackTrace();TransactionAspectSupport.currentTransactionStatus().setRollbackOnly()}return result;
}

在这里插入图片描述
在这里插入图片描述

事务隔离级别设置

当不同事务同时对数据库进行数据操作,就会出现问题,因此可以针对不同的情景设置不同的隔离级别
在这里插入图片描述

在@Transactional注解中可以设置事务的隔离级别
在这里插入图片描述

代码含义问题
Isolation.DEFAULT默认级别 以数据库隔离级别执行
Isolation.READ_UNCOMMITTED读未提交 可以读未提交数据存在脏读问题
Isolation.READ_COMMITED读已提交 只能读到已经提交事务存在不可重复读问题
Isolation.REPEATABLE_READ可重复读存在幻读问题
Isolation.SERIALIZABLE串行化性能低

事务传播机制

在项目中会存在多个方法链式调用,而每一个方法都有可能存在事务,因此存在不同的事物传播机制
在这里插入图片描述
分别有如下几种事物传播级别:

代码说明
Propagation.REQUIRED(默认)如果当前存在事务则加入事务,都则创建一个事务
Propagation.SUPPORTS如果当前存在事务就加入事务,否则就以非事务方式运行
Propagation.MANDATORY如果当前存在事务就加入事务,否则抛出异常
Propagation.REQUIRES_NEW不管当前有没有事务,都创建并使用新事务
Propagation.NOT_SUPPORTED不管当前有没有事务,都以非事务方式运行
Propagation.NEVER以非事务形式运行,如果当前存在事务就抛出异常
Propagation.NESTED如果当前存在事务,则创建一个事务作为当前事务的嵌套事务运行,当作REQUIRED
http://www.hkea.cn/news/422354/

相关文章:

  • 网站模板制作流程nba交易最新消息汇总
  • 近的网站在线客服系统网络优化工程师前景如何
  • 网站制作职业google入口
  • 广州网站 制作信科便宜网络营销软文范例500
  • 网站建设公开课长沙网站推广和优化
  • 建设网站的需求分析俄罗斯搜索引擎yandex推广入口
  • 可以做英文纵横字谜的网站搜狗网站收录入口
  • web前端开发是不是做网站百家号关键词排名优化
  • 夸克看网站要钱吗电商网站seo优化
  • 自己做网站排版138ip查询网域名解析
  • 东莞做网站 南城石佳2023网站推广入口
  • 广东省省建设厅网站郴州网站建设网络推广平台
  • 校园网站推广方案怎么做应用商店优化
  • 巩义网站建设网络营销公司是做什么的
  • 做网站基本教程一站式营销平台
  • 杭州模板网站建设电脑培训网上培训班
  • 大连做网站不错的公司怎样把广告放到百度
  • 网站上面带官网字样怎么做的网站设计的流程
  • 有个网站是做视频相册的网球排名即时最新排名
  • 论坛网站备案流程图优化大师怎么提交作业
  • 织梦政府网站模板百度在线入口
  • 专业做婚纱摄影网站会员制营销
  • 网站内容丰富互动营销平台
  • 阿里巴巴logo高清图谷歌seo网站推广
  • 网站如何做内链seo高手是怎样炼成的
  • 设计师个人网站建设怎样注册一个自己的平台
  • 徐州营销网站建设产品线上推广渠道
  • 绍兴市网站建设公司企业官网搭建
  • 关于网页设计的网站免费发布信息网站大全
  • 郑州新闻头条seo基础教程