MyBatis标签 <foreach> 遍历插入
时间: 2023-05-31 11:06:25 浏览: 198
MyBatis的<foreach>标签可以用来遍历一个集合,然后插入多条记录到数据库中。
下面是一个示例,它将遍历一个List集合,然后将集合中的每个元素插入到数据库中。
```
<insert id="batchInsert" parameterType="java.util.List">
INSERT INTO user (name, age)
VALUES
<foreach collection="list" item="user" separator=",">
(#{user.name}, #{user.age})
</foreach>
</insert>
```
在上面的示例中,<insert>标签的parameterType属性指定了参数类型为java.util.List。然后,<foreach>标签的collection属性指定了要遍历的集合,item属性指定了集合中每个元素的名称,separator属性指定了每个元素之间的分隔符。
<foreach>标签中的SQL语句会被遍历多次,每次遍历都会插入一条记录到数据库中。在插入时,会使用集合中的每个元素的属性值来填充SQL语句中的参数。例如,#{user.name}会被替换为集合中每个元素的name属性值。
相关问题
MyBatis用标签 <foreach> <trim>写一个遍历插入
假设我们有一个List<Student>对象,每个Student对象包含id和name属性,需要将其插入到数据库中,可以使用MyBatis的<foreach>和<trim>标签实现:
```
<insert id="batchInsertStudents" parameterType="java.util.List">
insert into student (id, name)
values
<trim suffixOverrides=",">
<foreach collection="list" item="student" separator=",">
(#{student.id}, #{student.name})
</foreach>
</trim>
</insert>
```
上面的SQL语句使用了<foreach>标签遍历List<Student>对象,使用<trim>标签去除最后一个逗号。其中,collection属性指定要遍历的集合,item属性指定集合中的元素在循环中的名称,separator属性指定每个元素之间的分隔符。#{student.id}和#{student.name}表示Student对象中的id和name属性。最终生成的SQL语句类似如下:
```
insert into student (id, name)
values
(1, '张三'),
(2, '李四'),
(3, '王五')
```
mybatis中<choose>在<foreach>一起使用
在MyBatis的SQL映射文件(如XML)中,`<choose>`标签通常用于条件分支,而`<foreach>`则用于循环遍历集合。当你需要在循环体内部根据某个条件选择不同的处理方式时,可以将它们结合使用。
例如,假设你有一个列表,你想根据每个元素的一个属性值执行不同的插入操作,你可以这样做:
```xml
<select id="insertItems" parameterType="List<Item>" resultType="int">
<choose>
<when test="itemType == 'A'">
<!-- 当itemType为'A'时的插入语句 -->
INSERT INTO tableA (fieldA, fieldB) VALUES (${fieldA}, ${fieldB})
</when>
<when test="itemType == 'B'">
<!-- 当itemType为'B'时的插入语句 -->
INSERT INTO tableB (fieldX, fieldY) VALUES (${fieldX}, ${fieldY})
</when>
<!-- 其他case... -->
</choose>
<foreach item="item" index="index" collection="items" open="," separator="," close=";">
<!-- 使用foreach来遍历list -->
<choose>
<when test="${#index} % 2 == 0">
<!-- 如果索引是偶数,使用第一个选择 -->
INSERT INTO tableA (fieldA, fieldB) VALUES (${item.fieldA}, ${item.fieldB})
</when>
<otherwise>
<!-- 否则是奇数,使用第二个选择 -->
INSERT INTO tableB (fieldX, fieldY) VALUES (${item.fieldX}, ${item.fieldY})
</otherwise>
</choose>
</foreach>
</select>
```
在这个例子中,`<choose>`首先根据`itemType`选择对应的表,然后在`<foreach>`内部进一步根据索引的奇偶性选择不同的插入操作。
阅读全文