一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - mybatis insert foreach循環插入方式

mybatis insert foreach循環插入方式

2021-10-07 12:00學亮編程手記 Java教程

這篇文章主要介紹了mybatis insert foreach循環插入方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

mybatis insert foreach循環插入

?
1
2
3
4
5
6
7
8
@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語句批量插入數據

本例技術:Spring+SpringMVC+MyBatis+Oracle

問題描述:

需要將程序里的一個集合保存到數據庫里,集合的類型對應數據庫的一個實體,若在程序里遍歷集合再一條條保存到數據庫表中有點麻煩,這里可以利用MyBatis 的 foreach語句實現批量插入數據。

核心代碼清單:

Item(實體類):

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class Item {
    private String itemCode;//項目代碼
    private String itemName;//項目名稱
    private String itemValue;//項目值(多個值用逗號隔開)
    private String itemCategory;//項目所屬類別
 
    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實現層方法:

?
1
2
3
public Integer submitItem(List<Item> list ){
    return researchMapper.submitItem(list);
}

MyBatis的mapper配置文件的語句

在Oracle數據中,多條數據之間用union all 連接,MySQL數據庫用:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<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>
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!--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元素是一個遍歷集合的循環語句,它支持遍歷數組,List和Set接口的集合。

foreach元素中,collection是傳進來的參數名稱,可以是一個數組或者List、Set等集合;

item是循環中當前的元素(配置的item的名字隨意取,類似于iterator);

index是當前元素在集合中的位置下標;

seperator是各個元素的間隔符;

()分別是open和close元素,表示用什么符號將這些集合元素包裝起來。

注意:由于一些數據庫的SQL對執行的SQL長度有限制,所以使用foreach元素的時候需要預估collection對象的長度;foreach除了用于本示例的循環插入,亦可用于構建in條件中(可自行嘗試)。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://zhangxueliang.blog.csdn.net/article/details/99718660

延伸 · 閱讀

精彩推薦
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7472021-02-04
主站蜘蛛池模板: 2018高清国产一道国产 | 国内精品久久久久久久久久久久 | 99九九国产精品免费视频 | 每天都要睡男人(nph) | 香蕉eeww99国产精选播放 | 性肥胖BWBWBW| 国产精品女同久久免费观看 | 无码区国产区在线播放 | 免费一看一级毛片人 | 欧美日韩人成在线观看 | 香蕉久久一区二区不卡无毒影院 | 美女狂揉尿口揉到失禁 | jzjzjz日本在线观看 | 苍井空色欲迷墙 | 午夜精品久久久 | 99久久免费国产香蕉麻豆 | 国产在线欧美日韩精品一区二区 | 美女扒开腿让男生桶爽漫画 | 双性鞭蒂软汁淋漓 | 国产精品久久久久久网站 | 99精品视频在线观看免费播放 | 视频一区二区国产无限在线观看 | 超h高h肉h文武侠 | 青青热久免费精品视频网站 | 男人的天堂va | 免费视频片在线观看 | 经典欧美gifxxoo动态图暗网 | 思思玖玖玖在线精品视频 | 操破苍穹h | swag最新正在播放 | 男人把大ji巴放进男人免费视频 | 国产日韩欧美在线播放 | 美女禁区视频无遮挡免费看 | 关晓彤一级做a爰片性色毛片 | 色哟哟哟在线精品观看视频 | 日本68xxxxxxxxx24 日本 片 成人 在线 | 我和岳的性事小说 | 九九热在线视频 | 国产精品午夜久久 | 成人国产网站v片免费观看 成人国产精品视频 | 亚洲精品一区二区久久这里 |