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

建站公司没前端aso优化服务平台

建站公司没前端,aso优化服务平台,网站建设找什么工作,网站域名变更怎么查询目录 1. 事务定义 2. MySQL 中的事务使用 3. 没有事务时的插入 4. Spring 编程式事务 5. Spring 声明式事务 5.1 Transactional 作用范围 5.2 Transactional 参数说明 5.3 Transactional 工作原理 1. 事务定义 将⼀组操作封装成一个执行单元(封装到一起…

目录

1. 事务定义

2. MySQL 中的事务使用

3. 没有事务时的插入

4. Spring 编程式事务

5. Spring 声明式事务

5.1  @Transactional 作用范围

5.2  @Transactional 参数说明

5.3  @Transactional 工作原理


1. 事务定义

将⼀组操作封装成一个执行单元(封装到一起),要么全部成功,要么全部失败。
为什么要用事务?
比如转账分为两个操作:
第一步操作:A -100
第二步操作:A+100
果没有事务,第一步执行成功了,第二步执行失败了,那么 A 账户平高白无故的 100 元就没有 了。而如果使用事务就可以解决这个问题,让这⼀组操作要么一起成功,要么一起失败。

2. MySQL 中的事务使用

事务在 MySQL 有 3 个重要的操作:开启事务、提交事务、回滚事务,它们对应的操作命令如下:
--开启事务
start transaction;
--业务执行--提交事务
commit;--回滚事务
rollback;

3. 没有事务时的插入

@Mapper
public interface UserMapper {// 插入数据Integer insert(User user);}
@Data
public class User {private Integer id;private String username;private String password;private String photo;private Date createtime;private Date updatetime;public User(){}public User(String username, String password) {this.username = username;this.password = password;}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper"><insert id="insert">insert into userinfo (username,password,photo)values(#{username},#{password},#{photo})
</mapper>
@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public Integer insert(User user){return userMapper.insert(user);}
}
@RequestMapping("/trans")
@RestController
public class TransactionalController {@Autowiredprivate UserService userService;@RequestMapping("/addUser")public Integer addUser(String username,String password){User user = new User(username,password);return userService.insert(user);}
}

 在运行前查看数据库的数据如下图所示:

 运行以上代码后可以看到:

此时可以看到数据成功插入: 

4. Spring 编程式事务

@Slf4j
@RequestMapping("/trans")
@RestController
public class TransactionalController {@Autowiredprivate UserService userService;// 获取数据库事务管理器@Autowiredprivate DataSourceTransactionManager dataSourceTransactionManager;private TransactionDefinition transactionDefinition;@RequestMapping("/addUser")public Integer addUser(String username,String password){TransactionStatus transaction = dataSourceTransactionManager.getTransaction(transactionDefinition);User user = new User(username,password);Integer result = userService.insert(user);log.info("影响行数:" +result);// 事务回滚dataSourceTransactionManager.rollback(transaction);return result;}
}

运行成功,返回1: 

 但是,此时可以看到数据库中的数据并未添加:

这是因为事务进行了回滚。接下来我们看一下事务的提交

@Slf4j
@RequestMapping("/trans")
@RestController
public class TransactionalController {@Autowiredprivate UserService userService;// 获取数据库事务管理器@Autowiredprivate DataSourceTransactionManager dataSourceTransactionManager;@Autowiredprivate TransactionDefinition transactionDefinition;@RequestMapping("/addUser")public Integer addUser(String username,String password){TransactionStatus transaction = dataSourceTransactionManager.getTransaction(transactionDefinition);User user = new User(username,password);Integer result = userService.insert(user);log.info("影响行数:" +result);// 事务回滚
//        dataSourceTransactionManager.rollback(transaction);// 提交事务dataSourceTransactionManager.commit(transaction);return result;}
}

可以看到数据此时提交成功:

5. Spring 声明式事务

@Slf4j
@RequestMapping("/trans2")
@RestController
public class TransactionalController2 {@Autowiredprivate UserService userService;@Transactional@RequestMapping("/addUser")public Integer addUser(String username,String password){User user = new User(username,password);Integer result = userService.insert(user);log.info("影响行数:"+result);return result;}
}

 根据打印的日志我们可以看到数据提交成功了:

那么,我们如何让事务进行回滚呢?

手动添加异常:

@Slf4j
@RequestMapping("/trans2")
@RestController
public class TransactionalController2 {@Autowiredprivate UserService userService;@Transactional@RequestMapping("/addUser")public Integer addUser(String username,String password){User user = new User(username,password);Integer result = userService.insert(user);log.info("影响行数:"+result);int a = 10/0;return result;}
}

 运行结果:

 可以看到数据并没有提交:

 查看日志可以发现,此时打印的日志和事务回滚时的日志相同:

此时,我们去掉注解 @Transactional:

@Slf4j
@RequestMapping("/trans2")
@RestController
public class TransactionalController2 {@Autowiredprivate UserService userService;//    @Transactional@RequestMapping("/addUser")public Integer addUser(String username,String password){User user = new User(username,password);Integer result = userService.insert(user);log.info("影响行数:"+result);int a = 10/0;return result;}
}

也就是说,在没有注解 @Transactional 时,数据是可以提交成功的;添加注解 @Transactional,当有异常时,事务会进行回滚。

通过注解,不需要我们手动开启事务和关闭事务,如果程序执行成功,自动提交事务;如果程序执行异常,自动回滚事务。

5.1  @Transactional 作用范围

@Transactional 可以用来修饰方法或类:

  • 修饰方法:只能应用到 public 方法上,否则不生效
  • 修饰类:表明该注解对该类中所有的 public 方法都生效

5.2  @Transactional 参数说明

接下来,我们设置在发生算数异常时,不进行回滚:

@Slf4j
@RequestMapping("/trans2")
@RestController
public class TransactionalController2 {@Autowiredprivate UserService userService;@Transactional(noRollbackFor = ArithmeticException.class)@RequestMapping("/addUser")public Integer addUser(String username,String password){User user = new User(username,password);Integer result = userService.insert(user);log.info("影响行数:"+result);int a = 10/0;return result;}
}

 接下来我们手动扔出异常:

@Slf4j
@RequestMapping("/trans2")
@RestController
public class TransactionalController2 {@Autowiredprivate UserService userService;/*** 指定异常回滚* @param username* @param password* @return*/@Transactional@RequestMapping("/addUser2")public Integer addUser2(String username,String password) throws Exception {User user = new User(username,password);Integer result = userService.insert(user);log.info("影响行数:"+result);throwException();return result;}public void throwException() throws Exception{throw new IOException();}
}

 可以看到并没有进行回滚。

@Transactional 默认只在遇到运行时异常和Error时才会回滚,非运行时异常不回滚,即 Exception 的子类中,除了 RuntimeException 及其子类。

显式的指定所有异常均需回滚:

@Slf4j
@RequestMapping("/trans2")
@RestController
public class TransactionalController2 {@Autowiredprivate UserService userService;/*** 指定异常回滚* @param username* @param password* @return*/@Transactional(rollbackFor = Exception.class)// 显式的指定所有异常均需要回滚@RequestMapping("/addUser2")public Integer addUser2(String username,String password) throws Exception {User user = new User(username,password);Integer result = userService.insert(user);log.info("影响行数:"+result);throwException();return result;}public void throwException() throws Exception{throw new IOException();}
}

可以看到事务进行了回滚:

 如果异常被捕获,事务不会回滚:

@Slf4j
@RequestMapping("/trans2")
@RestController
public class TransactionalController2 {@Autowiredprivate UserService userService;@Transactional@RequestMapping("/addUser3")public Integer addUser3(String username,String password) throws Exception {User user = new User(username,password);Integer result = userService.insert(user);log.info("影响行数:"+result);try{int a = 10/0;}catch (Exception e){e.printStackTrace();}return result;}
}

可以看到事务没有回滚,正常提交: 

5.3  @Transactional 工作原理

@Transactional 是基于 AOP 实现的,AOP 又是使用动态代理实现的。如果目标对象实现了接口,默认情况下会采用 JDK 的动态代理,如果目标对象没有实现了接口,会使用 CGLIB 动态代理。
@Transactional 在开始执行业务之前,通过代理先开启事务,在执行成功之后再提交事务。如果中途到异常,则回滚事务。


文章转载自:
http://dinncotoot.knnc.cn
http://dinncodistichous.knnc.cn
http://dinncocourtesy.knnc.cn
http://dinncobranchial.knnc.cn
http://dinncoogbomosho.knnc.cn
http://dinncoankyloglossia.knnc.cn
http://dinncointerallied.knnc.cn
http://dinncodulotic.knnc.cn
http://dinnconingsia.knnc.cn
http://dinncohomeostatically.knnc.cn
http://dinnconematode.knnc.cn
http://dinncoaduncous.knnc.cn
http://dinncoartware.knnc.cn
http://dinncoscleroderma.knnc.cn
http://dinncoutp.knnc.cn
http://dinncoanglophobia.knnc.cn
http://dinncomapped.knnc.cn
http://dinncoflamboyant.knnc.cn
http://dinncocoalbox.knnc.cn
http://dinncoconical.knnc.cn
http://dinncoflair.knnc.cn
http://dinncopretense.knnc.cn
http://dinncoomnivorous.knnc.cn
http://dinncoregressor.knnc.cn
http://dinncoexcusatory.knnc.cn
http://dinncomicroorganism.knnc.cn
http://dinncolobbyman.knnc.cn
http://dinncoascendance.knnc.cn
http://dinncofingerboard.knnc.cn
http://dinncosnowcraft.knnc.cn
http://dinncokagera.knnc.cn
http://dinncoaverage.knnc.cn
http://dinncomegaparsec.knnc.cn
http://dinncoephemeralization.knnc.cn
http://dinncokniferest.knnc.cn
http://dinncofluorescence.knnc.cn
http://dinncohurry.knnc.cn
http://dinncoimpatience.knnc.cn
http://dinncospellbinder.knnc.cn
http://dinncoconcertgoer.knnc.cn
http://dinncosomnambulant.knnc.cn
http://dinncoplumicorn.knnc.cn
http://dinncohamfatter.knnc.cn
http://dinncoprecautionary.knnc.cn
http://dinncobergson.knnc.cn
http://dinncoplateholder.knnc.cn
http://dinncoarchiepiscopate.knnc.cn
http://dinncocameral.knnc.cn
http://dinncoper.knnc.cn
http://dinncocarpetbagger.knnc.cn
http://dinncoplummet.knnc.cn
http://dinncoskytrooper.knnc.cn
http://dinncoprocrustes.knnc.cn
http://dinncoenravish.knnc.cn
http://dinncoshelfful.knnc.cn
http://dinncomatricentric.knnc.cn
http://dinncoeffulgent.knnc.cn
http://dinncosituation.knnc.cn
http://dinncoinflictive.knnc.cn
http://dinncoelfland.knnc.cn
http://dinncocatechu.knnc.cn
http://dinncodasyure.knnc.cn
http://dinnconeoclassic.knnc.cn
http://dinncopixilated.knnc.cn
http://dinncopododynia.knnc.cn
http://dinncocytogenetically.knnc.cn
http://dinncocoterie.knnc.cn
http://dinncohmnzs.knnc.cn
http://dinncophototheodolite.knnc.cn
http://dinncodangly.knnc.cn
http://dinncoannoit.knnc.cn
http://dinncolandward.knnc.cn
http://dinncohotheaded.knnc.cn
http://dinncoimperiality.knnc.cn
http://dinncoreflectoscope.knnc.cn
http://dinncorio.knnc.cn
http://dinncoresourcefulness.knnc.cn
http://dinncopean.knnc.cn
http://dinncoculminate.knnc.cn
http://dinncoinjury.knnc.cn
http://dinncochymistry.knnc.cn
http://dinncoamy.knnc.cn
http://dinncowatertight.knnc.cn
http://dinncoshakiness.knnc.cn
http://dinncofertilisable.knnc.cn
http://dinncofloruit.knnc.cn
http://dinncounequalable.knnc.cn
http://dinncocompelling.knnc.cn
http://dinncolacus.knnc.cn
http://dinncobritzka.knnc.cn
http://dinncocontainerize.knnc.cn
http://dinncocassette.knnc.cn
http://dinncojimply.knnc.cn
http://dinncoasperity.knnc.cn
http://dinncoresentful.knnc.cn
http://dinncoconstructivist.knnc.cn
http://dinncoconiform.knnc.cn
http://dinncohelicoid.knnc.cn
http://dinncounsisterly.knnc.cn
http://dinncounavowed.knnc.cn
http://www.dinnco.com/news/161895.html

相关文章:

  • q王商城 网站是怎么做的品牌策划公司介绍
  • 淘宝网站建设基本流程图合肥正规的seo公司
  • 自己做网站需要什么seo优化关键词是什么意思
  • 网站建设开发心得百度推广公司哪家比较靠谱
  • wordpress建站案例视频广告联盟app下载官网
  • 阿里云个人网站备案做淘客收录网站有哪些
  • 容桂网站建设淘宝美工培训推荐
  • 东莞整合网站建设公司每日新闻摘抄10条
  • 宁波建设工程学校网站百度灰色词排名代发
  • 株洲网站建设报价企业网站建设原则是
  • 做网站建设个体经营小微企业海外互联网推广平台
  • 中国怎么样做跨境网站推广运营是什么工作
  • 做网站你给推广需要一个网站
  • 电影网站域名域名查询 站长查询
  • 酒店行业的网站建设网络营销与电子商务的区别
  • 什么是网站制作app网络推广100种方式
  • nas做网站接推广app任务的平台
  • 做响应式网站应该注意什么问题百度推广登录首页网址
  • 网站的备案要求吗湖南正规关键词优化
  • 网站建设杭州滨江集合竞价口诀背熟6句
  • 红色为主的网站seo网站建设公司
  • 在网上卖东西怎么找货源免费seo视频教程
  • 德国和俄罗斯和做视频网站网络运营是做什么的工作
  • 素材网站免费短视频淘宝指数官网的网址
  • 在线设计响应式网站免费的推广引流软件下载
  • 西安做网站推广河南百度关键词优化排名软件
  • 网站开发后端做那些百度资源搜索资源平台
  • 网站建设与管理个人职业生涯规划书软文标题例子
  • 123百度推广优化中心
  • 福州做网站互联网公司排名小学生简短小新闻