日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發布時間:2025/3/15 数据库 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 springboot mysql事物_在Spring Boot中使用数据库事务 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于數據庫訪問還有一個核心操作那就是事務的處理了,前面兩篇博客小伙伴們已經見識到Spring Boot帶給我們的巨大便利了,其實不用猜,我們也知道Spring Boot在數據庫事務處理問題上也給我們帶來驚喜,OK,廢話不多說,就來看看如何在Spring Boot中使用事務吧。

可能還是會有一些小伙伴對Spring Boot并不是特別熟悉,不熟悉的小伙伴請移步這里從SpringMVC到Spring Boot,老司機請忽略。

創建Project并添加數據庫依賴

這個沒啥好說的,不懂如何創建一個Spring Boot工程的小伙伴請移步這里初識Spring Boot框架。創建的時候選擇依賴時選擇Web和JPA,如下圖:

圖片.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;

圖片.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=小說

我們來測試回滾的情況,訪問結果如下:

圖片.png

看看控制臺拋出的異常:

圖片.png

這個時候再去查看數據庫,發現數據表中并沒有插入數據

圖片.png

控制臺也打印了錯誤,但是這個時候再去看數據庫,數據已成功插入了。如下圖:

圖片.png

圖片.png

總結

以上是生活随笔為你收集整理的springboot mysql事物_在Spring Boot中使用数据库事务的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。