MySQL批量操作-筆記


一. 配置

首先,mysql需要數據庫連接配置&allowMultiQueries=true

jdbc.url=jdbc:mysql://mbp-mysql-xm01:5002/xmppsc?autoReconnect=true&useUnicode=true&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true

二. 批量操作

2.1. 事例

@Insert("insert into msg_inbox (`user_uid`,`pub_uid`,`msg_id`,`state`,`cts`,`uts`,`latest`,`source`) values " +
            "<foreach collection='items' index='index' item='item' open='(' separator='),(' close=')'>" +
            "#{item.user_uid},#{item.pub_uid},#{item.msg_id},#{item.state},#{item.cts},#{item.uts},#{item.latest},#{item.source}" +
            "</foreach>")
void batchInsert(@Param("items")List<MsgInbox> items);

 

@Update("update msg_inbox set latest=0 where (pub_uid,user_uid) in " +
            "<foreach collection='items' index='index' item='item' open='((' separator='),(' close='))'>" +
            "#{item.pub_uid},#{item.user_uid}" +
            "</foreach> and latest=1")
void clearSessions(@Param("items")List<MsgInbox> items);

 

@Update("<foreach collection='items' index='index' item='item' open='' separator=';' close=''>" +
            "update article set uts=#{item.uts}, read_num=#{item.read_num} where hash=#{item.hash} and read_num &lt; #{item.read_num}" +
            "</foreach>")
void updateReadNumListNumByHash(@Param("items")List<Article> items);

 

2.2. foreach

foreach的主要作用是在構建in條件中,它可以在SQL語句中進行迭代一個集合。

foreach元素的屬性主要有:collection,index,item,open,separator和close,意義如下:

意義
collection 需要操作的集合
index 指定一個名字,用於表示在迭代過程中,每次迭代到的位置
item 表示集合中每一個元素進行迭代時的別名;
open 表示該語句以什么開始
separator 表示在每次進行迭代之間以什么符號作為分隔符
close 表示以什么結束

在使用foreach的時候最關鍵的也是最容易出錯的就是collection屬性,該屬性是必須指定的,但是在不同情況 下,該屬性的值是不一樣的,主要有一下3種情況: 

1. 如果傳入的是單參數且參數類型是一個List的時候,collection屬性值為list 
2. 如果傳入的是單參數且參數類型是一個array數組的時候,collection的屬性值為array 
3. 如果傳入的參數是多個的時候,我們就需要把它們封裝成一個Map了,當然單參數也可以封裝成map,實際上如果你在傳入參數的時候,在breast里面也是會把它封裝成一個Map的,map的key就是參數名,所以這個時候collection屬性值就是傳入的List或array對象在自己封裝的map里面的key

三.注意

批量操作時,需要生成一段很長的操作語句,而語句過長時,會出現錯誤。

所以當有上萬條批量操作時,要注意這一點。

 

參考:mybatis批量操作

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM