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

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

可能还是会有一些小伙伴对Spring Boot并不是特别熟悉,不熟悉的小伙伴请移步这里从SpringMVC到Spring Boot,老司机请忽略。

创建Project并添加数据库依赖

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

ae05674318f6?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

图片.png

org.springframework.boot

spring-boot-starter-data-jpa

mysql

mysql-connector-java

org.mybatis.spring.boot

mybatis-spring-boot-starter

1.3.2

配置application.properties

配置方式还是和前文一模一样,不懂的小伙伴请移步这里初识在Spring Boot中使用JPA,我这里直接贴代码,含义不再赘述:

spring.datasource.url=jdbc:mysql://127.0.0.1/springboot2?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=true

spring.datasource.username=root

spring.datasource.password=514730

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

spring.jpa.properties.hibernate.hbm2ddl.auto=update

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect

spring.jpa.show-sql= true

spring.thymeleaf.cache=false

#中文

spring.http.encoding.charset=UTF-8

spring.http.encoding.force=true

spring.http.encoding.enabled=true

SQL

-- auto-generated definition

CREATE TABLE book

(

id INT AUTO_INCREMENT

PRIMARY KEY,

name VARCHAR(255) NULL,

writer VARCHAR(255) NULL,

introduction VARCHAR(255) NULL

)

ENGINE = InnoDB;

ae05674318f6?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

图片.png

创建实体类

package com.demo.entity;

import javax.persistence.*;

import javax.validation.constraints.Min;

import javax.validation.constraints.NotEmpty;

@Entity

@Table

public class Book {

@Id

@GeneratedValue()

private Long id;

@NotEmpty(message = "姓名不能为空")

@Column(length=50)

private String name;

@NotEmpty(message = "writer不能为空")

private String writer;

@NotEmpty(message = "introduction不能为空")

private String introduction;

public Book() {

}

@Override

public String toString() {

return "Book{" +

"id=" + id +

", name='" + name + '\'' +

", writer='" + writer + '\'' +

", introduction='" + introduction + '\'' +

'}';

}

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 getWriter() {

return writer;

}

public void setWriter(String writer) {

this.writer = writer;

}

public String getIntroduction() {

return introduction;

}

public void setIntroduction(String introduction) {

this.introduction = introduction;

}

}

创建实体类的Repository

import org.springframework.data.jpa.repository.JpaRepository;

public interface BookDao extends JpaRepository{

}

创建业务服务Service

创建Service接口

package com.demo.service;

import com.demo.entity.Book;

public interface BookService {

public void add(Book book);

public Book savePersonWithRollBack(Book person);

public Book savePersonWithoutRollBack(Book person);

}

创建Service实现类

@Service

@Transactional

public class BookServiceImpl implements BookService {

@Resource

BookDao dao;

public void add(Book book) {

dao.save(book);

}

@Transactional(rollbackFor = {IllegalArgumentException.class})

public Book savePersonWithRollBack(Book person) {

Book book= dao.save(person);

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

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

}

return book;

}

@Transactional(noRollbackFor = {IllegalArgumentException.class})

public Book savePersonWithoutRollBack(Book person) {

Book book= dao.save(person);

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

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

}

return book;

}

}

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

创建控制器

@RestController

public class BookController2 {

@Autowired

BookService service;

@RequestMapping("/norollback")

public Book noRollback(Book book) {

return service.savePersonWithoutRollBack(book);

}

@RequestMapping("/rollback")

public Book rollback(Book book)

{

return service.savePersonWithRollBack(book);

}

}

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

测试

首先在浏览器中输入

http://localhost:8080/rollback?name=sang&writer=施耐庵&introduction=小说

我们来测试回滚的情况,访问结果如下:

ae05674318f6?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

图片.png

看看控制台抛出的异常:

ae05674318f6?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

图片.png

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

ae05674318f6?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

图片.png

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

ae05674318f6?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

图片.png

ae05674318f6?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

图片.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574111.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cinder连接mysql数据库_Openstack入门篇(十六)之Cinder服务的部署与测试

1.理解块存储服务操作系统获得存储空间的方式一般有两种:通过某种协议(SAS,SCSI,SAN,iSCSI 等)挂接裸硬盘,然后分区、格式化、创建文件系统;或者直接使用裸硬盘存储数据(数据库)通过 NFS、CIFS 等 协议,mount 远程的文件系统第一种…

最后关于Pipeline完整的图如下:

最后关于Pipeline完整的图如下: 转载于:https://www.cnblogs.com/aaa6818162/p/5077988.html

amr 转mp3 java_JAVA 音频转换AMR 转MP3,OS,Linux cent os 7

场景近期在做微信开发时,需要获取用户发给公众服务号的语音留言。而从微信服务端下载来的语音格式却是amr的格式,同样的你手机录音、Android语音等也都是生成amr格式文件。但当你想在web页面去播放此文件时,就困难了。因为无论是当前HTML5的标…

dragloader.js帮助你在页面原生滚动下实现Pull Request操作

dragloader.js是一个面向移动Web开发的JavaScript库,帮助开发者在使用页面原生滚动时,模拟上/下拉手势,实现Pull Request操作。 在移动设备上,一般会使用 drag down 手势实现加载最新 使用 drag up 手势实现加载更多 dragloader样…

怎么运行java虚拟机_Java代码如何运行在Java虚拟机中

我们都知道要运行Java代码就必须要有JRE,也就是Java运行时环境,JRE中包含了Java程序的必需组件,包括Java虚拟机以及Java核心类库,然而运行C代码则不需要额外的运行时环境,只需要把代码编译成CPU能识别的指令即可&#…

【AJAX】AJAX实现搜索信息自己主动推荐并补全

好久没有继续看AJAX的视频教程了,今天就将最后一个教程案例做完。我们在搜索引擎中输入文字时文本框下会提示对应的信息,这个案例就是实现这样的基本功能,代码比較粗糙还须要进一步完好,当中有些地方也须要向大神们请教一下。完毕效果截图&am…

使用IntelliJ IDEA 14和Maven创建java web项目

安装Maven 下载安装 去maven官网下载最新版。 解压到安装目录。 配置 右键桌面的计算机图标,属性–>高级系统设置–>环境变量,添加M2_HOME的环境变量,然后将该变量加入的PATH中。 注意 必须要有JAVA_HOME和个环境变量,不然m…

工作那点小事

目录 工作那点小事总结回到顶部工作那点小事 离开了“火龙果”,领导,领导的领导,领导的领导的领导,同事,同事等等,给你上了一堂课。 面试时,问:为什么离开上一家公司?答&…

Testlink1.9.5的安装配置

前两天搭建了Testlink环境,在这里整理记录下过程中遇到的问题以及搭建流程。Testlink版本:1.9.5操作系统:Windows7 32bit 步骤一:安装XAMPP 下载解压xampp压缩包,点击安装包xampp-win32-1.8.0-VC9-installerservice se…

UIAutomator输入中文

之前一直是英文的测试环境,包括手机也是英文的,app也是英文的,涉及不到中文输入法的东西。但现在在写中文的app,所以需要输入中文。看到网上的解决办法如下: 下载https://github.com/sumio/uiautomator-unicode-input-helper源码 …

jni java返回数组_Android开发实践:Java层与Jni层的数组传递

Android开发中,经常会在Java代码与Jni层之间传递数组(byte[]),一个典型的应用是Java层把需要发送给客户端的数据流传递到Jni层,由Jni层的Socket代码发送出去,当然,Jni层也需要把从Socket接收到的数据流返回给Java层。我…

jsp mysql 注入_由Jsp+Mysql注入到root权限的全程展 【好久没有安全类文章了,转一篇看看】...

由JspMysql注入到root权限的全程展最近有点空闲,所以写点垃圾文章来消磨一下时间.文中没有什么技术含量,如果要转载,请注明作者并保持文章的完整.很多人可能都知道asp,php的编程要防止sql注入漏洞,而并不知道jsp编程同样也需要防备sql注入漏洞.其实,一旦jsp代码有注入漏洞,将直…

Divide and conquer:Dropping tests(POJ 2976)

最大化平均值 题目大意:给定你n个分数,从中找出k个数,使∑a/∑b的最大值 这一题同样的也可以用二分法来做(用DP会超时,可见二分法是多么的实用呵!),大体上是这样子:假设最…

java中标准封装结构_java中的构造,封装

今天给大家讲一下面向对象中的构造,封装;构造:构造方法有以下几个特点:1.方法名和类名一致。2.无返回类型。接下来的几种构造样式,直接上代码吧://这是一个宠物类 有一个属性:名字(name)public …

《白日梦想家》观后感

To see the world, things dangerous to come to, To see behind walls, to draw closer, To find each other and to feel That is the Purpose of LIFE.” 这部片子我很喜欢,大概我在现实生活中,也就是一个梦想家吧。想过很多事,但是真正去…

linux隐藏tomcat版本_Ubuntu 14.04隐藏Tomcat-7.0.52的版本号与操作系统类型

一般情况下,软件的漏洞信息和特定版本,特定操作系统是相关的,因此,软件的版本号以及操作系统类型对攻击者来说是很有价值的。在默认情况下,Tomcat会在返回信息中把自身的版本号,操作系统类型都显示出来&…

自定义tabbar

/** * 注意:* 打开自定义tabbar的背景视图的交互* 选中的tabb视图高度为tabbar背景视图的高度/2-选中视图高度/2* 选中视图加载到tabbar背景视图上* label注意居中,imgView注意选择适应模式,都加载到tabbar背景视图* 设置点击手势的点击事件…

php7与apache整合,apache集成php7.3.5的详细步骤

安装 php首先安装 php 的压缩包,目前下载地址解压文件到这个路径下:D:Program Filesphp-7.3.5(自行选择合适的路径).然后将这个路径加入到环境变量 path 中。然后打开 cmd 运行php -version,输出类似如下,说明安装成功。PHP 7.3.5 (cli) (bui…

php后门 佛像,35张活的再久,也未必见过的照片,图2是佛像通过CT扫描后内部照...

今天这组照片可能很多人都是一次见到,包括小编本人看了也十分惊讶。最大的感触是,很多的商品居然是这么做出来的,看完了才有一种豁然开朗的感觉,废话不多说一起看看吧。鸡蛋里面套鸡蛋1000年前佛像,经过CT扫描后&#…

droidbox官网

droidbox官网,droidbox已经移植到github上了 https://github.com/pjlantz/droidbox 转载于:https://www.cnblogs.com/nightnine/p/5169261.html