mybatis insert foreach循環(huán)插入方式
mybatis insert foreach循環(huán)插入
@Insert("<script>" +
"insert into driver_account_appeal_photo (appeal_id,appeal_photo_path) values\n" +
"<foreach collection=\"photoList\" item=\"item\" index=\"index\" separator=\",\">\n" +
"\t(#{appealId},#{item})\n" +
"</foreach>" +
"</script>")
//@Insert("insert into driver_account_appeal_photo (appeal_id,appeal_photo_path) values(#{appealId},#{appealPhotoPath})")
void addAppealPhoto(AppealPhoto appealPhoto);
foreach語(yǔ)句批量插入數(shù)據(jù)
本例技術(shù):Spring+SpringMVC+MyBatis+Oracle
問題描述:
需要將程序里的一個(gè)集合保存到數(shù)據(jù)庫(kù)里,集合的類型對(duì)應(yīng)數(shù)據(jù)庫(kù)的一個(gè)實(shí)體,若在程序里遍歷集合再一條條保存到數(shù)據(jù)庫(kù)表中有點(diǎn)麻煩,這里可以利用MyBatis 的 foreach語(yǔ)句實(shí)現(xiàn)批量插入數(shù)據(jù)。
核心代碼清單:
Item(實(shí)體類):
public class Item {
private String itemCode;//項(xiàng)目代碼
private String itemName;//項(xiàng)目名稱
private String itemValue;//項(xiàng)目值(多個(gè)值用逗號(hào)隔開)
private String itemCategory;//項(xiàng)目所屬類別
public String getItemCode() {
return itemCode;
}
public void setItemCode(String itemCode) {
this.itemCode = itemCode;
}
public String getItemName() {
return itemName;
}
public void setItemName(String itemName) {
this.itemName = itemName;
}
public String getItemValue() {
return itemValue;
}
public void setItemValue(String itemValue) {
this.itemValue = itemValue;
}
public String getItemCategory() {
return itemCategory;
}
public void setItemCategory(String itemCategory) {
this.itemCategory = itemCategory;
}
}
Service實(shí)現(xiàn)層方法:
public Integer submitItem(List<Item> list ){
return researchMapper.submitItem(list);
}
MyBatis的mapper配置文件的語(yǔ)句
在Oracle數(shù)據(jù)中,多條數(shù)據(jù)之間用union all 連接,MySQL數(shù)據(jù)庫(kù)用:
<insert id="submitItem" parameterType="java.util.List">
insert into ITEM (
ITEM_CODE,
ITEM_NAME,
ITEM_VALUE,
ITEM_CATAGORY
)
select item.* from
(
<foreach collection="list" item="item" index="index" separator="UNION ALL" >
select
#{item.itemCode,jdbcType=VARCHAR},
#{item.itemName,jdbcType=VARCHAR},
#{item.itemValue,jdbcType=VARCHAR},
#{item.itemCategory,jdbcType=VARCHAR}
from dual
</foreach>
) item
</insert>
<!--MySql寫法-->
<insert id="submitItem" parameterType="java.util.List">
insert into ITEM (
ITEM_CODE,
ITEM_NAME,
ITEM_VALUE,
ITEM_CATAGORY
)
values
<foreach collection="list" item="item" index="index" separator="," >
(
#{item.itemCode,jdbcType=VARCHAR},
#{item.itemName,jdbcType=VARCHAR},
#{item.itemValue,jdbcType=VARCHAR},
#{item.itemCategory,jdbcType=VARCHAR}
)
</foreach>
</insert>
foreach元素解析:
foreach元素是一個(gè)遍歷集合的循環(huán)語(yǔ)句,它支持遍歷數(shù)組,List和Set接口的集合。
foreach元素中,collection是傳進(jìn)來(lái)的參數(shù)名稱,可以是一個(gè)數(shù)組或者List、Set等集合;
item是循環(huán)中當(dāng)前的元素(配置的item的名字隨意取,類似于iterator);
index是當(dāng)前元素在集合中的位置下標(biāo);
seperator是各個(gè)元素的間隔符;
()分別是open和close元素,表示用什么符號(hào)將這些集合元素包裝起來(lái)。
注意:由于一些數(shù)據(jù)庫(kù)的SQL對(duì)執(zhí)行的SQL長(zhǎng)度有限制,所以使用foreach元素的時(shí)候需要預(yù)估collection對(duì)象的長(zhǎng)度;foreach除了用于本示例的循環(huán)插入,亦可用于構(gòu)建in條件中(可自行嘗試)。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- MyBatis中的循環(huán)插入insert foreach問題
- mybatis foreach 循環(huán) list(map)實(shí)例
- MyBatis如何進(jìn)行雙重foreach循環(huán)
- mybatis多個(gè)區(qū)間處理方式(雙foreach循環(huán))
- MyBatis實(shí)現(xiàn)批量插入數(shù)據(jù),多重forEach循環(huán)
- mybatis錯(cuò)誤之in查詢?<foreach>循環(huán)問題
- MyBatis中使用foreach循環(huán)的坑及解決
- MyBatis之foreach標(biāo)簽的用法及多種循環(huán)問題
相關(guān)文章
如何把springboot jar項(xiàng)目 改為war項(xiàng)目
這篇文章主要介紹了如何把springboot jar項(xiàng)目 改為war項(xiàng)目,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
Mybatis-Plus Wrapper條件構(gòu)造器超詳細(xì)使用教程
接口方法的參數(shù)中,會(huì)出現(xiàn)各種 Wrapper,比如 queryWrapper、updateWrapper 等。Wrapper 的作用就是用于定義各種各樣的條件(where)。所以不管是查詢、更新、刪除都會(huì)用到Wrapper2022-03-03
使用IDEA工具配置和運(yùn)行vue項(xiàng)目及遇到的坑
這篇文章主要介紹了使用IDEA工具配置和運(yùn)行vue項(xiàng)目及遇到的坑,需要的朋友可以參考下2018-09-09
為什么不建議使用Java自定義Object作為HashMap的key
這篇文章主要介紹了為什么不建議使用Java自定義Object作為HashMap的key,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-06-06
Java高性能新一代構(gòu)建工具M(jìn)aven-mvnd(實(shí)踐可行版)
這篇文章主要介紹了Java高性能新一代構(gòu)建工具M(jìn)aven-mvnd(實(shí)踐可行版),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06
Spring boot 默認(rèn)靜態(tài)資源路徑與手動(dòng)配置訪問路徑的方法
這篇文章主要介紹了Spring boot 默認(rèn)靜態(tài)資源路徑與手動(dòng)配置訪問路徑的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-05-05
java書店系統(tǒng)畢業(yè)設(shè)計(jì) 總體設(shè)計(jì)(1)
這篇文章主要介紹了java書店系統(tǒng)畢業(yè)設(shè)計(jì),第一步系統(tǒng)總體設(shè)計(jì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10

