mybatis oracle 批量插入
时间: 2023-08-30 13:10:11 浏览: 152
MyBatis 有一个批量插入的功能,可以使用 Oracle 的 `INSERT ALL` 语法实现批量插入。
首先,在 Mapper 中定义一个批量插入的方法,如下:
```java
public interface UserMapper {
void insertBatch(List<User> userList);
}
```
然后在对应的 XML 文件中实现该方法,如下:
```xml
<insert id="insertBatch" parameterType="java.util.List">
<foreach collection="list" item="user" index="index">
<if test="index == 0">
INSERT ALL
</if>
<choose>
<when test="index % 100 == 0">
<foreach collection="list" separator=" " index="i" item="item" start="${index}" end="${index+99}">
INTO user_table(name, age) VALUES (#{item.name}, #{item.age})
</foreach>
<if test="index == list.size() - 1">
SELECT 1 FROM DUAL
</if>
</when>
<otherwise>
<foreach collection="list" separator=" " index="i" item="item" start="${index}" end="${list.size()-1}">
INTO user_table(name, age) VALUES (#{item.name}, #{item.age})
</foreach>
<if test="index == list.size() - 1">
SELECT 1 FROM DUAL
</if>
</otherwise>
</choose>
</foreach>
</insert>
```
该方法中使用了 `foreach` 标签循环遍历待插入的数据,并根据每 100 条数据进行一次批量插入操作。具体实现如下:
- 如果是第一次遍历,则插入 `INSERT ALL` 语句;
- 如果当前条数是 100 的整数倍,则插入 100 条数据,并在最后插入一个 `SELECT 1 FROM DUAL` 语句,表示批量插入的结束;
- 如果不是 100 的整数倍,则插入剩余的数据,并在最后插入一个 `SELECT 1 FROM DUAL` 语句,表示批量插入的结束。
需要注意的是,Oracle 的 `INSERT ALL` 语法要求每个字段都必须有值,因此在插入数据时需要指定每个字段的值,否则会报错。在本例中,假设插入的表名为 `user_table`,字段名为 `name` 和 `age`。
阅读全文