一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術(shù)|正則表達(dá)式|

服務(wù)器之家 - 編程語言 - JAVA教程 - 詳解在Spring Boot中使用數(shù)據(jù)庫事務(wù)

詳解在Spring Boot中使用數(shù)據(jù)庫事務(wù)

2020-10-07 22:43_江南一點(diǎn)雨 JAVA教程

本篇文章主要介紹了詳解在Spring Boot中使用數(shù)據(jù)庫事務(wù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

我們?cè)谇懊嬉呀?jīng)分別介紹了如何在spring boot中使用jpa以及如何在spring boot中輸出rest資源。那么關(guān)于數(shù)據(jù)庫訪問還有一個(gè)核心操作那就是事務(wù)的處理了,前面兩篇博客小伙伴們已經(jīng)見識(shí)到spring boot帶給我們的巨大便利了,其實(shí)不用猜,我們也知道spring boot在數(shù)據(jù)庫事務(wù)處理問題上也給我們帶來驚喜,ok,廢話不多說,就來看看如何在spring boot中使用事務(wù)吧。

ok,那我們開始今天愉快的coding旅程吧!

創(chuàng)建project并添加數(shù)據(jù)庫依賴

這個(gè)沒啥好說的,不懂如何創(chuàng)建一個(gè)spring boot工程的小伙伴請(qǐng)移步這里初識(shí)spring boot框架。創(chuàng)建的時(shí)候選擇依賴時(shí)選擇web和jpa,如下圖:

詳解在Spring Boot中使用數(shù)據(jù)庫事務(wù)

ok,工程創(chuàng)建成功之后接下來我們來添加數(shù)據(jù)庫驅(qū)動(dòng),和前文一樣,我這里還是以mysql數(shù)據(jù)庫為例,在pom.xml文件中添加如下依賴:

?
1
2
3
4
5
<dependency>
      <groupid>mysql</groupid>
      <artifactid>mysql-connector-java</artifactid>
      <version>5.1.40</version>
    </dependency>

配置application.properties

配置方式還是和前文一模一樣,我這里直接貼代碼,含義不再贅述:

?
1
2
3
4
5
6
7
8
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

創(chuàng)建實(shí)體類

實(shí)體類還是一個(gè)person,如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
@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;
  }
}

創(chuàng)建實(shí)體類的repository

?
1
2
public interface personrepository extends jparepository<person,long> {
}

這里因?yàn)槲覀兊哪康氖菧y(cè)試事務(wù),所以repository中暫時(shí)先不寫任何東西。

創(chuàng)建業(yè)務(wù)服務(wù)service

創(chuàng)建service接口

?
1
2
3
4
5
public interface demoservice {
  public person savepersonwithrollback(person person);
 
  public person savepersonwithoutrollback(person person);
}

創(chuàng)建service實(shí)現(xiàn)類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@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 已存在,數(shù)據(jù)將回滾");
    }
    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已存在,但數(shù)據(jù)不會(huì)回滾");
    }
    return p;
  }
}

在這里我們使用到了@transactional注解,該注解中有一個(gè)rollbackfor屬性,該屬性的值為數(shù)組,表示當(dāng)該方法中拋出指定的異常時(shí)數(shù)據(jù)回滾,該注解還有個(gè)屬性叫norollbackfor,表示當(dāng)該方法中拋出指定的異常時(shí)數(shù)據(jù)不回滾,這兩個(gè)屬性我們分別在兩個(gè)方法中體現(xiàn)。

創(chuàng)建控制器

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@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);
  }
}

控制器創(chuàng)建成功之后接下來我們就可以直接在瀏覽器中訪問這兩個(gè)地址看看效果了。

測(cè)試

首先在瀏覽器中輸入http://localhost:8080/rollback?name=sang&age=100,我們來測(cè)試回滾的情況,訪問結(jié)果如下:

詳解在Spring Boot中使用數(shù)據(jù)庫事務(wù)

看看控制臺(tái)拋出的異常:

詳解在Spring Boot中使用數(shù)據(jù)庫事務(wù)

這個(gè)時(shí)候再去查看數(shù)據(jù)庫,發(fā)現(xiàn)數(shù)據(jù)表中并沒有插入數(shù)據(jù)。

再在地址欄輸入http://localhost:8080/norollback?name=sang&age=100,測(cè)試結(jié)果如下:

瀏覽器依然報(bào)錯(cuò):

詳解在Spring Boot中使用數(shù)據(jù)庫事務(wù)

控制臺(tái)也打印了錯(cuò)誤,但是這個(gè)時(shí)候再去看數(shù)據(jù)庫,數(shù)據(jù)已成功插入了。如下圖:

詳解在Spring Boot中使用數(shù)據(jù)庫事務(wù)

ok,以上就是數(shù)據(jù)庫事務(wù)在spring boot中的簡(jiǎn)單使用。

本文案例github地址https://github.com/lenve/javaeetest/tree/master/test24-transaction

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:http://blog.csdn.net/u012702547/article/details/54098190

延伸 · 閱讀

精彩推薦
  • JAVA教程Sequelize 常用操作詳解及實(shí)例代碼

    Sequelize 常用操作詳解及實(shí)例代碼

    這篇文章主要介紹了Sequelize 常用操作詳解及實(shí)例代碼的相關(guān)資料,希望能幫助到大家,需要的朋友可以參考下 ...

    bugall1802020-07-06
  • JAVA教程java 集合----Map、Collection

    java 集合----Map、Collection

    HashSet 的 add() 方法添加集合元素時(shí)實(shí)際上轉(zhuǎn)變?yōu)檎{(diào)用 HashMap 的 put()方法來添加 key-value 對(duì)。HashMap 的 put() 方法.hashCode() 判斷返回值相等,如果返回值相等則...

    liuyaqian2742020-04-21
  • JAVA教程詳解Java設(shè)計(jì)模式編程中的中介者模式

    詳解Java設(shè)計(jì)模式編程中的中介者模式

    這篇文章主要介紹了Java設(shè)計(jì)模式編程中的中介者模式,文中舉了典型的同事類與中介者類的例子來解釋說明,需要的朋友可以參考下 ...

    卡奴達(dá)摩4632020-03-28
  • JAVA教程java線性表排序示例分享

    java線性表排序示例分享

    這篇文章主要介紹了java線性表排序示例,需要的朋友可以參考下 ...

    java教程網(wǎng)2922019-11-12
  • JAVA教程Java中生成隨機(jī)數(shù)的實(shí)現(xiàn)方法總結(jié)

    Java中生成隨機(jī)數(shù)的實(shí)現(xiàn)方法總結(jié)

    這篇文章主要介紹了Java中生成隨機(jī)數(shù)的實(shí)現(xiàn)方法總結(jié),其中多線程并發(fā)的實(shí)現(xiàn)方式尤為exciting,需要的朋友可以參考下 ...

    turkeyzhou2112020-03-02
  • JAVA教程淺談Java中注解Annotation的定義、使用、解析

    淺談Java中注解Annotation的定義、使用、解析

    下面小編就為大家?guī)硪黄獪\談Java中注解Annotation的定義、使用、解析。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看...

    Java教程網(wǎng)1792020-09-10
  • JAVA教程淺談IDEA中Maven配置問題全解決

    淺談IDEA中Maven配置問題全解決

    這篇文章主要介紹了淺談IDEA中Maven配置問題全解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下...

    CringKong4252020-07-25
  • JAVA教程全面解析Java8觀察者模式

    全面解析Java8觀察者模式

    這篇文章主要為大家全面解析Java8觀察者模式,通過在 Java8 環(huán)境下實(shí)現(xiàn)觀察者模式的實(shí)例,進(jìn)一步介紹了什么是觀察者模式、專業(yè)化及其命名規(guī)則,感興趣...

    仲浩3012020-04-02
主站蜘蛛池模板: 午夜欧美精品久久久久久久久 | 欧美在线视频 一区二区 | 日本三级s级在线播放 | 久久综合久综合久久鬼色 | 久久精品中文字幕 | 俺去俺来也www色官网免费的 | 北条麻妃黑人正在播放 | 女同69式互添在线观看免费 | 亚洲+国产+图片 | 精品亚洲456在线播放 | 99热久久这里只精品国产www | 国产成人v爽在线免播放观看 | 欧美日韩视频在线一区二区 | 极品丝袜老师h系列全文阅读 | 色老妇| 激情婷婷成人亚洲综合 | 精久久 | 五月天网站 | 国产成人高清亚洲一区91 | 国产va免费精品高清在线观看 | 欧美成人免费观看国产 | xxxxxx日本处大片免费看 | 日本三级欧美三级人妇英文 | 精品四虎国产在免费观看 | 日本久久啪啪婷婷激情五月 | 亚洲国产成人久久综合一区 | 99热免费在线观看 | 亚洲女同在线观看 | 欧美精品国产一区二区 | 99久久伊人一区二区yy5099 | www.一区二区三区.com | 色婷婷久久综合中文久久一本` | 顶级尤物极品女神福利视频 | 成人免费视频一区 | 狗老公小说 | 国产91素人搭讪系列天堂 | 热久久99精品这里有精品 | 2020最新韩国理论三级0k | 精品久久久久久久久久久 | 欧美二区三区 | 肉文高h调教 |