91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MyBatis怎么配置多sql腳本執行

發布時間:2023-03-31 11:10:32 來源:億速云 閱讀:113 作者:iii 欄目:開發技術

本篇內容介紹了“MyBatis怎么配置多sql腳本執行”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

MyBatis配置多sql腳本執行

在實際開發場景中,有時候為了減少代碼的冗余,在編寫數據執行方法時,希望一個方法同時執行兩個sql腳本,順序執行,不影響業務邏輯。

1、在數據源配置中增加如下配置:allowMultiQueries=true

spring:
  profiles: dev
  datasource:
    #主數據源
    master:
      type: com.alibaba.druid.pool.DruidDataSource
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=UTC&allowMultiQueries=true
      username: root
      password: 123456

2、多sql語句以分號;相隔

<update id="updateId" parameterType="java.lang.Integer">
        update t_menu set name = #{name} where id = #{id};
        update t_stu set order_no = order_no+1 where id = #{id};
</update>

注意:多條sql語句同時執行,不存在事務,即其中一條sql語句報錯不會影響另外一條語句執行。

解決辦法:

在service層方法里添加@Transactional注解,添加@Transactional注解后,spring默認拋出未檢查unchecked異常(繼承自RuntimeException的異常)或者Error才會回滾,換句話說,若只是添加@Transactional注解,對于RuntimeException異常或者Error錯誤默認會觸發事務回滾,對于其他的異常是不會觸發異常的,若此時想要其他異常也能觸發回滾,需要添加@Transactional的rollbackFor屬性值,比如在代碼中手動拋出Exception異常

如下:

if (res > 0) {
      // 拋出異常,事物捕抓異常,事物進行回滾
      throw new Exception("無權限審批!");
}

此時加上rollbackFor屬性值如下,當出現Exception異常時,可以觸發事務回滾。 

@Transactional(rollbackFor = Exception.class)

建議:自定義一個異常處理類,該異常類繼承RuntimeException類,在需要拋出異常時,調用該自定義異常類,此時方法執行出現異常,會拋出RuntimeException,在方法頭加上@Transactional即可,而不需要添加rollbackFor屬性值。

MyBatis一次執行多條sql,一個標簽多個Insert、update、delete

再平時的工作、學習中,我們會遇見插入,修改,刪除多個表的操作,我們不可能寫多條insert標簽等,這就需要在一個標簽中寫多個SQL語句

  <insert id="addPurchase" parameterType="com.zhao.vo.PurchaseVoOne">
        insert into enters_sells_saves.purchase ( amount, price, purchase_time)
        values (#{amount},#{price},#{purchaseTime});
        insert into enters_sells_saves.goods (goods_name)
        values (#{goodsName});
        insert into enters_sells_saves.supplier (supplier_name)
        values (#{supplierName});
    </insert>

需要我們在數據庫連接配置中加入:

allowMultiQueries=true

如:

jdbc:mysql://localhost:3306/enters_sells_saves?useSSL=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT&allowMultiQueries=true

這樣就可以在一個標簽中使用多個sql語句了

“MyBatis怎么配置多sql腳本執行”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

巨野县| 黎川县| 加查县| 陈巴尔虎旗| 连江县| 眉山市| 六安市| 同心县| 内乡县| 河北省| 新田县| 买车| 德钦县| 阳城县| 从化市| 和林格尔县| 普洱| 定远县| 天峨县| 沙雅县| 浠水县| 乌苏市| 迭部县| 游戏| 张家口市| 兰溪市| 双辽市| 磐石市| 高雄市| 那曲县| 兴业县| 连江县| 逊克县| 平陆县| 西城区| 农安县| 银川市| 滨海县| 都江堰市| 乐清市| 星子县|