中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

来凤县| 平顺县| 巴楚县| 灯塔市| 平安县| 平山县| 三穗县| 合肥市| 合水县| 通化县| 保康县| 玛纳斯县| 桦川县| 新龙县| 鹤岗市| 连平县| 姚安县| 屏东市| 玛多县| 衡水市| 镇江市| 梅河口市| 平潭县| 兰溪市| 苏尼特右旗| 桦南县| 扎鲁特旗| 德惠市| 库伦旗| 雅安市| 肇庆市| 扎兰屯市| 斗六市| 淮阳县| 兰西县| 资中县| 利辛县| 平南县| 崇文区| 福鼎市| 郁南县|