1. 程式人生 > 其它 >target has libraries with conflicting names: libcrypto.a and libssl.a.

target has libraries with conflicting names: libcrypto.a and libssl.a.

使用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