您好,登錄后才能下訂單哦!
本篇內容介紹了“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屬性值。
再平時的工作、學習中,我們會遇見插入,修改,刪除多個表的操作,我們不可能寫多條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腳本執行”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。