Dict.CN 在线词典, 英语学习, 在线翻译 ------------- MyGitee 朱秋贵内科诊所 My腾云code

玩转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

posted @ 2020-11-24 09:05  cn2024  阅读(516)  评论(0编辑  收藏  举报