在實際項目中,我們一般都會用到批量insert、delete、update
等操作,由於使用頻率還是蠻高的,這里就做個簡單的記錄,供以后學習和參考.
批量insert
在數據庫中,批量插入可以是多條insert into tableName values(?,?,?...);
或者一條insert into tableName values (?,?,?...),(?,?,?...),(?,?,?...)....
那么我們在使用mybatis時,xml就可以如下寫批量操作:
1 |
<insert id ="INSERT-CODE-BATCH" parameterType="java.util.List" > |
標簽說明:
- foreach元素的屬性主要有 item,index,collection,open,separator,close。
- item表示集合中每一個元素進行迭代時的別名
- index指定一個名字,用於表示在迭代過程中,每次迭代到的位置
- open表示該語句以什么開始
- separator表示在每次進行迭代之間以什么符號作為分隔符
- close表示以什么結束
- collection屬性為必填屬性! 可以是List,Array,Map.
注意
這里的foreach
標簽沒有包含insert into tableName
,所以最后實際執行的是一條SQL語句:
insert into redeem_code (batch_id, code, type, facevalue,create_user,create_time)
values
(?,?,?,?,?,? ),(?,?,?,?,?,? ),(?,?,?,?,?,? ),(?,?,?,?,?,? )
批量update
mybatis的批量重點就是怎么去將sql拼接成可以直接在數據庫執行的sql,這里再記錄下以ibatis的批量操作,只要會了一個,其他也都不是問題了.
1 |
<update id="WHOLESALE-UPDATE-REBATE-CONFIG-BY-PRODUCTCODE" > |
標簽說明:
- prepend 可被覆蓋的 SQL 語句組成部分,添加在語句的前面(可選)
- property 類型為 java.util.List 的用於遍歷的元素(必選)
- open 整個遍歷內容體開始的字符串,用於定義括號(可選)
- close 整個遍歷內容體結束的字符串,用於定義括號(可選)
- conjunction 每次遍歷內容之間的字符串,用於定義 AND 或 OR(可選)
注意
-
我這里傳遞過來的參數是一個Map<string,object>
1
2
3Map<String, Object> conditions = new HashMap<String, Object>();
conditions.put("rebateConfigValue", rebateValue); //rebateValue是一個固定的值
conditions.put("list", productCodeList); -
使用時,在List元素名后面包括方括號[]非常重要,方括號[]將對象標記為List,以防解析器簡單地將List輸出成String