zoukankan      html  css  js  c++  java
  • 玩转spring boot——结合JPA事务

    接着上篇

    一、准备工作


    修改pom.xml文件

     pom.xml

    添加src/resources/application.properties文件

     application.properties

    添加src/resources/templates/index.html文件

     View Code

    上篇的Order类

     Order.java

    新建实现JpaRepository的OrderRepository接口

     OrderRepository.java

    新建OrderDao类

    复制代码
    package com.github.carter659.spring06;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Repository;
    
    import com.mysql.jdbc.StringUtils;
    
    @Repository
    public class OrderDao {
    
        @Autowired
        private OrderRepository orderRepository;
    
        /**
         * 获取全部
         * 
         * @return
         */
        public List<Order> findAll() {
            return orderRepository.findAll();
        }
    
        /**
         * 持久化
         * 
         * @param entity
         * @return
         */
        public void save(Order entity) throws Exception {
            // 持久化
            orderRepository.save(entity);
            // 如果持久化成功,就抛出异常。如果开启事务,那么刚才持久化的数据应回滚
            if (!StringUtils.isNullOrEmpty(entity.id))
                throw new Exception("测试无法持久化第一条数据的异常");
        }
    }
    复制代码

    假设:当成功insert一条数据后,抛出异常。如果事务生效,则数据会回滚。反之,则不回滚。

    控制器:MainController

     MainController.java

    程序入口:App.java

     App.java

    运行效果:

    添加数据

    点击保存按钮,并观察数据是否回滚:

    虽然抛出异常,但数据并未回滚。

    二、实现事务


    这时,我修改OrderDao类,增加@Transactional(readOnly = false, rollbackFor = Throwable.class)注解:

    复制代码
    package com.github.carter659.spring06;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Repository;
    import org.springframework.transaction.annotation.Transactional;
    
    import com.mysql.jdbc.StringUtils;
    
    @Repository
    @Transactional(readOnly = false, rollbackFor = Throwable.class)
    public class OrderDao {
    
        @Autowired
        private OrderRepository orderRepository;
    
        /**
         * 获取全部
         * 
         * @return
         */
        public List<Order> findAll() {
            return orderRepository.findAll();
        }
    
        /**
         * 持久化
         * 
         * @param entity
         * @return
         */
        public void save(Order entity) throws Exception {
            // 持久化
            orderRepository.save(entity);
            // 如果持久化成功,就抛出异常。如果开启事务,那么刚才持久化的数据应回滚
            if (!StringUtils.isNullOrEmpty(entity.id))
                throw new Exception("测试无法持久化第一条数据的异常");
        }
    }
    复制代码

    继续添加数据:

    按钮保存按钮,发现:数据回滚

    代码下载:https://github.com/carter659/spring-boot-06.git

  • 相关阅读:
    AndroidStudio制作个人资料界面模块以及SQLite数据库的使用
    掌握这13个MySQL索引知识点,让你面试通过率翻倍
    获取数据表最后最后访问,修改,更新,扫描时间
    一本彻底搞懂MySQL索引优化EXPLAIN百科全书
    Win10系统下的MySQL5.7.24版本(解压版)详细安装教程
    解决beego在ubuntu下连接mysql与重置mysql密码
    在Windows上安装MySQL
    docker~dockertoolbox的加速器
    Git 安装 on centos7
    centos7.x中安装SQL Server
  • 原文地址:https://www.cnblogs.com/smallfa/p/14028484.html
Copyright © 2011-2022 走看看