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

自己做网站买东西做商城网站带宽

自己做网站买东西,做商城网站带宽,企业网络建设基础情况,如何提高网站点击量目录 1. 事务定义 2. MySQL 中的事务使用 3. 没有事务时的插入 4. Spring 编程式事务 5. Spring 声明式事务 5.1 Transactional 作用范围 5.2 Transactional 参数说明 5.3 Transactional 工作原理 1. 事务定义 将⼀组操作封装成一个执行单元#xff08;封装到一起…目录 1. 事务定义 2. MySQL 中的事务使用 3. 没有事务时的插入 4. Spring 编程式事务 5. Spring 声明式事务 5.1  Transactional 作用范围 5.2  Transactional 参数说明 5.3  Transactional 工作原理 1. 事务定义 将⼀组操作封装成一个执行单元封装到一起要么全部成功要么全部失败。 为什么要用事务 比如转账分为两个操作 第一步操作A -100 第二步操作A100 果没有事务第一步执行成功了第二步执行失败了那么 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 version1.0 encodingUTF-8? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.example.demo.mapper.UserMapperinsert idinsertinsert 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;TransactionalRequestMapping(/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;TransactionalRequestMapping(/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;// TransactionalRequestMapping(/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*/TransactionalRequestMapping(/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;TransactionalRequestMapping(/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://www.tj-hxxt.cn/news/223828.html

相关文章:

  • 什么网站可以做时间加减公众号开发退款步骤
  • 手机版免费申请微网站wordpress写作主题
  • 校园内部网站建设方案北京大型商场
  • 网站是如何做的好遵义网络推广软文
  • 网站推广的方式和管理方法包头建设厅官方网站
  • 东莞网站开发前三强福建省建设注册中心网站
  • 做网站page只让搜索引擎查看文章wordpress
  • 烟台做网站的公司济南 网站建设
  • 个人电脑做网站违法吗网站专用app
  • 餐饮行业做网站的好处深圳网站设计官网
  • 网站建设收费标准讯息贵阳做网站多少钱
  • 网站集群建设中标潍坊建设网站公司电话
  • 建医疗网站步骤道滘镇做网站
  • 南京江浦做网站设计的公司wordpress产品页面模板
  • 网站开发费用如何账务处理学历提升销售好做吗
  • 网站服务器如何维护微信第三方开发平台
  • 一流高职院校建设工作网站网站建设设计说明
  • 网站建设实训心得及收获湖北联兴建设有限公司网站
  • 段友做的看电影网站网站主页和子页风格如何统一
  • 做服装搭配图的网站有哪些做招聘的网站有哪些内容
  • 义乌网站建设九手机qq邮箱登录网页入口
  • 网站开发都需要什么营销软文300字
  • 苏州制作公司网站的今天的新闻 最新消息
  • 杭州外贸建站公司微信网站在线登录网页版
  • 彩钢做网站能赚钱吗学新媒体运营最好的培训学校
  • 房城乡建设部门户网站google网站建设
  • 嘉兴网站关键词推广无锡商业网站建设
  • 公司网站被百度收录高端网站建设域名注册
  • 怎样做士产品销售网站网站建设丶金手指花总14
  • 杭州网站外包公司seo顾问服务公司