Mybatis的update更新批量與普通解決方式對(duì)比
需求前提:
通過(guò)其他庫(kù)里面查詢出一條數(shù)據(jù),并且對(duì)另外一個(gè)庫(kù)中的oederId進(jìn)行更新里面的內(nèi)容
注意:使用批量update時(shí)連接數(shù)據(jù)庫(kù)的語(yǔ)句需要添加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)該是效率最低的更新
查詢出來(lái)直接進(jìn)行update修改語(yǔ)句
2.通過(guò)批量更新
通過(guò)查詢匹配存在表里面的數(shù)據(jù),就把需要更新的數(shù)據(jù)添加到一個(gè)集合中去,在xml使用foreach來(lái)更新數(shù)據(jù),如果需要插入的數(shù)據(jù)太長(zhǎng)可能存在一些問(wèn)題,那我們我們把需要插入的集合進(jìn)行分批插入,這樣也不至于update語(yǔ)句連起來(lái)太長(zhǎng)了
通過(guò)subList方法來(lái)截取插入的數(shù)量,我們按照500條進(jìn)行分批插入.
使用該方法必須使用左父右子的形式才能使用父類(lèi)的方法.
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語(yǔ)句:
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ì)以這種形式拼接起來(lái)然后在一起運(yùn)行!和第一種的區(qū)別在于,第一種是單條update的運(yùn)行提交!
注意事項(xiàng):使用set導(dǎo)致逗號(hào)出現(xiàn)的問(wèn)題
如果修改多個(gè)值的時(shí)候使用需要使用逗號(hào)分隔,都是會(huì)有一種情況如果對(duì)象的值是null那么使用if標(biāo)簽的值就不會(huì)會(huì)被插入,這樣就會(huì)出現(xiàn)一個(gè)問(wèn)題,如果對(duì)象里面的wxname是null那么插入的語(yǔ)句會(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è)問(wèn)題:我們把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)行程序開(kāi)始同步數(shù)據(jù)
同步時(shí)間從原來(lái)的1020秒變成現(xiàn)在的16秒速度提升多少呀
沒(méi)有進(jìn)行批量更新的時(shí)間!
以上就是Mybatis的update更新批量與普通解決方式對(duì)比的詳細(xì)內(nèi)容,更多關(guān)于Mybatis update更新批量普通對(duì)比的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
一文了解Java中record和lombok的使用對(duì)比
Java的 record 關(guān)鍵字是Java 14中引入的一個(gè)新的語(yǔ)義特性。Lombok 是一個(gè)Java庫(kù),可以自動(dòng)生成一些已知的模式為Java字節(jié)碼。本文我們將探討各種使用情況,包括java record 的一些限制。對(duì)于每個(gè)例子,我們將看到Lombok如何派上用場(chǎng),并比較這兩種解決方案2022-07-07Java根據(jù)身份證號(hào)計(jì)算年齡,15位身份證號(hào)碼轉(zhuǎn)18位原理與操作示例
這篇文章主要介紹了Java根據(jù)身份證號(hào)計(jì)算年齡,15位身份證號(hào)碼轉(zhuǎn)18位原理與操作,結(jié)合實(shí)例形式詳細(xì)分析了構(gòu)成身份證號(hào)碼的各個(gè)位的含義,15位身份證號(hào)碼轉(zhuǎn)18位的方法及Java根據(jù)身份證號(hào)計(jì)算年齡相關(guān)操作技巧,需要的朋友可以參考下2019-10-10SpringBoot中自定義首頁(yè)(默認(rèn)頁(yè))及favicon的方法
這篇文章主要介紹了SpringBoot中如何自定義首頁(yè)(默認(rèn)頁(yè))及favicon,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08Spring AOP訪問(wèn)目標(biāo)方法的參數(shù)操作示例
這篇文章主要介紹了Spring AOP訪問(wèn)目標(biāo)方法的參數(shù)操作,結(jié)合實(shí)例形式詳細(xì)分析了spring面向切面AOP訪問(wèn)目標(biāo)方法的參數(shù)相關(guān)實(shí)現(xiàn)步驟與操作注意事項(xiàng),需要的朋友可以參考下2020-01-01Logback動(dòng)態(tài)修改日志級(jí)別的方法
這篇文章主要介紹了Logback動(dòng)態(tài)修改日志級(jí)別的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11SpringBoot2零基礎(chǔ)到精通之異常處理與web原生組件注入
SpringBoot是Spring全家桶的成員之一,基于約定優(yōu)于配置的思想(即有約定默認(rèn)值,在不配置的情況下會(huì)使用默認(rèn)值,在配置文件下配置的話會(huì)使用配置的值)。SpringBoot是一種整合Spring技術(shù)棧的方式(或者說(shuō)是框架),同時(shí)也是簡(jiǎn)化Spring的一種快速開(kāi)發(fā)的腳手架2022-03-03基于SpringBoot+Redis的Session共享與單點(diǎn)登錄詳解
這篇文章主要介紹了基于SpringBoot+Redis的Session共享與單點(diǎn)登錄,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07java8 stream 由一個(gè)list轉(zhuǎn)化成另一個(gè)list案例
這篇文章主要介紹了java8 stream 由一個(gè)list轉(zhuǎn)化成另一個(gè)list案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08Java中創(chuàng)建對(duì)象的5種方式總結(jié)
本篇文章主要介紹了Java中創(chuàng)建對(duì)象的5種方式總結(jié),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02