在Mybatis中用Map类型的collection进行批量插入
时间: 2024-02-18 18:05:58 浏览: 105
在Mybatis中,可以使用Map类型的collection进行批量插入操作。Map类型的collection可以是Map、HashMap、LinkedHashMap等类型,其中键值对分别对应了表中的列名和值。
具体实现的步骤如下:
1. 在Mapper.xml文件中定义一个insert语句,并使用foreach标签遍历Map类型的collection。
```xml
<insert id="batchInsert" parameterType="java.util.Map">
insert into mytable (name, age) values
<foreach collection="list" item="item" separator=",">
(#{item.name}, #{item.age})
</foreach>
</insert>
```
2. 在Java代码中创建一个List<Map<String, Object>>类型的集合,用于存储要插入的数据。每个Map对象表示一条记录,其中键为列名,值为对应的值。
```java
List<Map<String, Object>> dataList = new ArrayList<>();
Map<String, Object> data1 = new HashMap<>();
data1.put("name", "张三");
data1.put("age", 20);
dataList.add(data1);
Map<String, Object> data2 = new HashMap<>();
data2.put("name", "李四");
data2.put("age", 30);
dataList.add(data2);
```
3. 调用SqlSession的insert方法执行批量插入操作。
```java
SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false);
try {
Mapper mapper = sqlSession.getMapper(Mapper.class);
mapper.batchInsert(dataList);
sqlSession.commit();
} finally {
sqlSession.close();
}
```
在执行批量插入操作时,需要使用SqlSession的ExecutorType.BATCH执行器类型,以及手动提交事务。需要注意的是,由于Mybatis中的批量操作是通过JDBC的addBatch和executeBatch方法实现的,因此在插入大量数据时,可能会出现OOM(内存溢出)等问题。为了避免这种情况发生,可以将数据分批插入,或者使用其他的批量插入方式。
阅读全文