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中使用数据库事务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php后门 佛像,35张活的再久,也未必
- 下一篇: 本地服务器的音乐如何才能播放视频文件夹,