MyBatis标签 <foreach> 遍历插入
时间: 2023-05-31 14:06:25 浏览: 117
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 List<map> 批量插入
使用 MyBatis 进行 List\<Map> 的批量插入操作可以按照以下步骤进行:
1. 在映射文件(Mapper XML)中编写插入语句。例如,假设你要插入的表名为 "example_table",包含两列 "column1" 和 "column2"。那么你可以编写如下插入语句:
```
<insert id="batchInsert" parameterType="java.util.List">
INSERT INTO example_table (column1, column2)
VALUES
<foreach collection="list" item="item" separator=",">
(#{item.column1}, #{item.column2})
</foreach>
</insert>
```
这里使用了 MyBatis 的 foreach 标签来遍历 List,并将列表中的每个 Map 的值插入到对应的列中。
2. 在对应的 Mapper 接口中定义对应的方法:
```
void batchInsert(List<Map<String, Object>> dataList);
```
这里的参数类型为 List\<Map\<String, Object>>,与映射文件中的 parameterType 保持一致。
3. 在你的代码中调用该方法进行批量插入:
```
List<Map<String, Object>> dataList = new ArrayList<>();
// 构建要插入的数据列表
// ...
mapper.batchInsert(dataList);
```
这里的 mapper 是你通过 MyBatis 的工厂方法得到的对应的 Mapper 对象。
通过以上步骤,你就可以使用 MyBatis 进行 List\<Map> 的批量插入操作了。注意确保映射文件中的插入语句与你的表结构和数据类型一致。