Mybatis的update更新批量與普通解決方式對(duì)比
需求前提:
通過其他庫里面查詢出一條數(shù)據(jù),并且對(duì)另外一個(gè)庫中的oederId進(jìn)行更新里面的內(nèi)容
注意:使用批量update時(shí)連接數(shù)據(jù)庫的語句需要添加allowMultiQueries=true
jdbc:mysql://127.0.0.1:3306/tb?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=false&allowMultiQueries=true
1.第一種:應(yīng)該是效率最低的更新
查詢出來直接進(jìn)行update修改語句

2.通過批量更新
通過查詢匹配存在表里面的數(shù)據(jù),就把需要更新的數(shù)據(jù)添加到一個(gè)集合中去,在xml使用foreach來更新數(shù)據(jù),如果需要插入的數(shù)據(jù)太長可能存在一些問題,那我們我們把需要插入的集合進(jìn)行分批插入,這樣也不至于update語句連起來太長了

通過subList方法來截取插入的數(shù)量,我們按照500條進(jìn)行分批插入.

使用該方法必須使用左父右子的形式才能使用父類的方法.
List< T > uptbDtos=new ArrayList<>();
xml改造
<update id="updateOrderXqlDatas">
<foreach collection="list" index="index" item="item" separator=";" open="" close="">
UPDATE tb_taobao_order
<set>
<if test="item.wxid != null"> wxid = #{item.wxid},</if>
<if test="item.wxname != null"> wxname = #{item.wxname}</if>
</set>
WHERE
TRADE_ID = #{item.tradeid,jdbcType=VARCHAR}
</foreach>
</update>
輸出的sql語句:
update tb_taobao_order set wxid='1' ,wxname='哈哈哈' where TRADE_ID='5456';update tb_taobao_order set wxid='2' ,wxname='哈哈哈2' where TRADE_ID='5458';
會(huì)以這種形式拼接起來然后在一起運(yùn)行!和第一種的區(qū)別在于,第一種是單條update的運(yùn)行提交!
注意事項(xiàng):使用set導(dǎo)致逗號(hào)出現(xiàn)的問題
如果修改多個(gè)值的時(shí)候使用需要使用逗號(hào)分隔,都是會(huì)有一種情況如果對(duì)象的值是null那么使用if標(biāo)簽的值就不會(huì)會(huì)被插入,這樣就會(huì)出現(xiàn)一個(gè)問題,如果對(duì)象里面的wxname是null那么插入的語句會(huì)變成:update tb_taobao_order set wxid='1' , where TRADE_ID='5456';你會(huì)發(fā)現(xiàn)wxid=‘1’ 后面跟著一個(gè)逗號(hào)這樣的sql肯定會(huì)報(bào)錯(cuò)的!**
解決這一個(gè)問題:我們把set標(biāo)簽更改掉換成trim標(biāo)簽
<foreach collection="list" index="index" item="item" separator=";" open="" close="">
UPDATE tb_taobao_order
<trim prefix="set" suffixOverrides=",">
<if test="item.wxid != null"> wxid = #{item.wxid},</if>
<if test="item.wxname != null"> wxname = #{item.wxname}</if>
</trim>
WHERE
TRADE_ID = #{item.tradeid,jdbcType=VARCHAR}
</foreach>
< trim>節(jié)點(diǎn)標(biāo)簽解讀:
屬性:
prefix:trim包含的內(nèi)容前加上某些前綴
suffix:trim包含的內(nèi)容后面添加后綴
prefixOverrides:內(nèi)容首部的某些內(nèi)容去掉
suffixOverrides:內(nèi)容的尾部的某些內(nèi)容去掉
好了修改好后,運(yùn)行程序開始同步數(shù)據(jù)

同步時(shí)間從原來的1020秒變成現(xiàn)在的16秒速度提升多少呀

沒有進(jìn)行批量更新的時(shí)間!
以上就是Mybatis的update更新批量與普通解決方式對(duì)比的詳細(xì)內(nèi)容,更多關(guān)于Mybatis update更新批量普通對(duì)比的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringBoot讀取resource目錄下文件失敗的原因及解決方案
在idea中運(yùn)行時(shí),有些resource下文件讀取工具類能夠正常獲取讀取到文件,但是通過java–jar的方式去運(yùn)行jar包,此時(shí)resource下文件讀取工具類讀取文件就失效了,本文就給大家介紹一下SpringBoot讀取resource目錄下文件失敗解決方案,需要的朋友可以參考下2023-08-08
Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(4)
下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你2021-07-07
Java實(shí)現(xiàn)多線程下載和斷點(diǎn)續(xù)傳
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)多線程下載和斷點(diǎn)續(xù)傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06

