我们在前面已经分别介绍了如何在spring Boot中使用JPA以及如何在Spring Boot中输出REST资源。那么关于数据库访问还有一个核心操作那就是事务的处理了,前面两篇博客小伙伴们已经见识到Spring Boot带给我们的巨大便利了,其实不用猜,我们也知道Spring Boot在数据库事务处理问题上也给我们带来惊喜,OK,废话不多说,就来看看如何在Spring Boot中使用事务吧。

OK,那我们开始今天愉快的coding旅程吧!

创建Project并添加数据库依赖

这个没啥好说的,不懂如何创建一个Spring Boot工程的小伙伴请移步这里初识Spring Boot框架。创建的时候选择依赖时选择Web和JPA,如下图:

OK,工程创建成功之后接下来我们来添加数据库驱动,和前文一样,我这里还是以MySQL数据库为例,在pom.xml文件中添加如下依赖:

mysql

mysql-connector-java

5.1.40

配置application.properties

配置方式还是和前文一模一样,我这里直接贴代码,含义不再赘述:

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.datasource.url=jdbc:mysql://localhost:3306/rest

spring.datasource.username=root

spring.datasource.password=sang

spring.jpa.hibernate.ddl-auto=update

spring.jpa.show-sql=true

spring.jackson.serialization.indent_output=true

创建实体类

实体类还是一个Person,如下:

@Entity

public class Person {

@Id

@GeneratedValue

private Long id;

private String name;

private String address;

private Integer age;

public Person() {

}

public Long getId() {

return id;

}

public void setId(Long id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

public Integer getAge() {

return age;

}

public void setAge(Integer age) {

this.age = age;

}

public Person(Long id, String name, String address, Integer age) {

this.id = id;

this.name = name;

this.address = address;

this.age = age;

}

}

创建实体类的Repository

public interface PersonRepository extends JpaRepository {

}

这里因为我们的目的是测试事务,所以Repository中暂时先不写任何东西。

创建业务服务Service

创建Service接口

public interface DemoService {

public Person savePersonWithRollBack(Person person);

public Person savePersonWithoutRollBack(Person person);

}

创建Service实现类

@Service

public class DemoServiceImpl implements DemoService {

@Autowired

PersonRepository personRepository;

@Transactional(rollbackFor = {IllegalArgumentException.class})

@Override

public Person savePersonWithRollBack(Person person) {

Person p = personRepository.save(person);

if (person.getName().equals("sang")) {

throw new IllegalArgumentException("sang 已存在,数据将回滚");

}

return p;

}

@Transactional(noRollbackFor = {IllegalArgumentException.class})

@Override

public Person savePersonWithoutRollBack(Person person) {

Person p = personRepository.save(person);

if (person.getName().equals("sang")) {

throw new IllegalArgumentException("sang已存在,但数据不会回滚");

}

return p;

}

}

在这里我们使用到了@Transactional注解,该注解中有一个rollbackFor属性,该属性的值为数组,表示当该方法中抛出指定的异常时数据回滚,该注解还有个属性叫noRollbackFor,表示当该方法中抛出指定的异常时数据不回滚,这两个属性我们分别在两个方法中体现。

创建控制器

@RestController

public class MyController {

@Autowired

private DemoService demoService;

@RequestMapping("/norollback")

public Person noRollback(Person person) {

return demoService.savePersonWithoutRollBack(person);

}

@RequestMapping("/rollback")

public Person rollback(Person person) {

return demoService.savePersonWithRollBack(person);

}

}

控制器创建成功之后接下来我们就可以直接在浏览器中访问这两个地址看看效果了。

测试

首先在浏览器中输入http://localhost:8080/rollback?name=sang&age=100,我们来测试回滚的情况,访问结果如下:

看看控制台抛出的异常:

这个时候再去查看数据库,发现数据表中并没有插入数据。

再在地址栏输入http://localhost:8080/norollback?name=sang&age=100,测试结果如下:

浏览器依然报错:

控制台也打印了错误,但是这个时候再去看数据库,数据已成功插入了。如下图:

OK,以上就是数据库事务在Spring Boot中的简单使用。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

java事务是基于数据库的么_详解在Spring Boot中使用数据库事务相关推荐

  1. Spring Boot中的多事务管理

    ** 一.多数据源问题 ** 最后一个可以插入一条数据,原因是Transactoinal的事务只针对userMapper有效,因为之前的事务只给test1配置了,而test2并没有配置事务. ** 二 ...

  2. springboot mysql事物_在Spring Boot中使用数据库事务

    关于数据库访问还有一个核心操作那就是事务的处理了,前面两篇博客小伙伴们已经见识到Spring Boot带给我们的巨大便利了,其实不用猜,我们也知道Spring Boot在数据库事务处理问题上也给我们带 ...

  3. python获取mysql中的数据供js调用_详解js文件通过python访问数据库方法

    我来教你 js文件怎么通过python访问数据库,希望能够为你带来帮助. 1.如果是要提交表单内容给 服务器的 python 处理,那么只需要在表单 里面的 action 填写服务端的处理路由就可以了 ...

  4. mysql数据库的函数_详解数据库_MySQL: mysql函数

    一.内置函数 1.数学函数 rand() round(num) ceil(num) floor(num) 随机 四舍五入 向上取整 向下取整 2.字符串函数 length() 字节长度 char_le ...

  5. python编写数据库连接工具_详解使用Python写一个向数据库填充数据的小工具(推荐)...

    一. 背景 公司又要做一个新项目,是一个合作型项目,我们公司出web展示服务,合作伙伴线下提供展示数据. 而且本次项目是数据统计展示为主要功能,并没有研发对应的数据接入接口,所有展示数据源均来自数据库 ...

  6. springboot 读取配置文件_使用 @ConfigurationProperties 在 Spring Boot 中加载配置

    本文地址: 使用 @ConfigurationProperties 在 Spring Boot 中加载配置 使用 Spring Boot 加载配置文件的配置非常便利,我们只需要使用一些注解配置一下就能 ...

  7. python英语字典程序修改_详解如何修改python中字典的键和值

    我们知道python中字典是无序的,它们都是通过hash去对应的.一般的如果我们需要修改字典的值,只需要直接覆盖即可,而修改字典的键,则需要使用字典自带的pop函数,示例如下: t = {} t['a ...

  8. python字典修改键所对应值_详解如何修改python中字典的键和值

    我们知道python中字典是无序的,它们都是通过hash去对应的.一般的如果我们需要修改字典的值,只需要直接覆盖即可,而修改字典的键,则需要使用字典自带的pop函数,示例如下: t = {} t['a ...

  9. java获取mysql数据定时执行_详解SpringBoot 创建定时任务(配合数据库动态执行)...

    序言:创建定时任务非常简单,主要有两种创建方式:一.基于注解(@Scheduled) 二.基于接口(SchedulingConfigurer). 前者相信大家都很熟悉,但是实际使用中我们往往想从数据库 ...

最新文章

  1. Java 和 .NET 获得毫秒级长整型数值的差异和解决
  2. STM32如何查找hardfault原因
  3. ORACLE常用数值函数、转换函数、字符串函数介绍
  4. JavaEE 银联支付之网站支付-消费类交易
  5. 超级高铁Hyperloop进入新阶段,将在华盛顿破土动工!
  6. Git学习05 --分支管理02
  7. Online Judge for ACM-ICPC etc.
  8. 用Welford算法实现LN的方差更新
  9. host-only局域网络
  10. iOS开发中设置UITextField的占位文字的颜色,和光标的颜色
  11. 仿抖音上下滑动播放视频
  12. Java-web下使用RSA进行加密解密操作
  13. <算法导论>练习4.3
  14. 2019数据安装勾选_【登陆、勾选、签名......,你在发票平台遇到的各类问题这里都有答案!】增值税发票综合服务平台常见问题整理(一)...
  15. 菊风Juphoon 周波:5G消息+音视频,双风口下的融合发展
  16. GitHub上发现个菜谱仓库,来看看程序员都吃啥?
  17. 六度人脉,每一个擦肩而过都有可能和你有关系
  18. 第四章(第二节)没有人,在年少时想成为一个普通人
  19. 修改数据包欺骗服务器,关于arp欺骗修改数据包
  20. ECSHOP后台提示 XMlHttpRequest status:[500] 解决办法2016年6月

热门文章

  1. 集成方法-随机森林和AdaBoost
  2. vue的生命周期函数有哪些
  3. 车辆运动控制(6)考虑侧倾约束
  4. PW2312A输入55V,输出0.6A降压IC
  5. 国内外语音识别行业最全盘点及技术分析和预测
  6. 58热衷改名背后,就能拯救自身命运吗?
  7. 纯html折叠文字代码,不用JS,教你只用纯HTML做出几个实用网页效果
  8. 历届试题 核桃的数量(3个数的最小公倍数),翻硬币(贪心),买不到的数目(在范围内暴力,找范围,最小公倍数是上界,最小的数是下界),兰顿蚂蚁(dfs,模拟)
  9. fabric.Canvas
  10. 解决Eclipse不出提示