使用idea解決maven依賴衝突的問題
阿新 • • 發佈:2020-12-22
使用Mybatis批量處理資料,避免通過迴圈呼叫方法建立資料庫連線,減少任務耗時
xml檔案
1 <insert id="insertUser"> 2 insert into mr_user 3 (user_id,dept_id,username,nick_name,email,phone,gender,avatar_path,password,enabled,is_admin,en_name,org_id) 4 values 5 <foreach collection="list" item="roomUser"index="index" separator=","> 6 (#{roomUser.id},#{roomUser.dept},#{roomUser.userName},#{roomUser.nickName},#{roomUser.email},#{roomUser.phone},#{roomUser.gender},#{roomUser.avatarPath}, 7 #{roomUser.password},#{roomUser.enabled},#{roomUser.isAdmin},#{roomUser.enName},#{roomUser.orgId})8 </foreach> 9 </insert>
oreach元素的屬性主要有 item,index,collection,open,separator,close。
item表示集合中每一個元素進行迭代時的別名,index指定一個名字,用於表示在迭代過程中,每次迭代到的位置,open表示該語句以什麼開始,separator表示在每次進行迭代之間以什麼符號作為分隔符,close表示以什麼結束,在使用foreach的時候最關鍵的也是最容易出錯的就是collection屬性,該屬性是必須指定的,但是在不同情況 下,該屬性的值是不一樣的,主要有一下3種情況:
1.如果傳入的是單引數且引數型別是一個List的時候,collection屬性值為list
2.如果傳入的是單引數且引數型別是一個array陣列的時候,collection的屬性值為array
3.如果傳入的引數是多個的時候,需要把它們封裝成一個Map了,單引數也可以封裝成map
使用批量插入的SQL語句應該等價於
insert into mr_user (...) values (?,?,?,?,?,? ),(?,?,?,?,?,? ),(?,?,?,?,?,? ),(?,?,?,?,?,? )
在批量操作時語句會有長度限制:
SqlServer
對語句的條數和引數的數量都有限制,分別是 1000 和 2100。Mysql
對語句的長度有限制,預設是 4M。Mybatis
對動態語句沒有數量上的限制。
可以使用List的 subList 方法進行分段操作
for (int i = 0; i < list.size(); ) { int y = i + 1000; xxxmapper.insertUsers(list.subList(i, y > list.size() ? list.size() : y)); if (y >= list.size()) { break; } }
參考:https://www.cnblogs.com/admol/articles/4248159.html
參考:https://blog.csdn.net/sunyanchun/article/details/89187552