好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

查看更多关于mybatis insert foreach循环插入方式的详细内容...

  阅读:13次