mybatis批量插入后获取新增的列表
时间: 2024-11-06 11:14:09 浏览: 27
在MyBatis中,批量插入通常是通过`insertList()`或`batchInsert()`方法来执行,这两个方法都是将一系列的数据一次性提交到数据库,而不是一条一条地插入。完成批量插入后,MyBatis并不会直接返回你插入数据的具体ID列表。
如果你想在插入后立即获取新生成的主键列表,你需要自定义一个结果映射器(ResultMapping)。首先,在Mapper XML文件中定义一个结果映射,比如使用`<association>`标签来关联一个包含主键的实体对象。然后在对应的Mapper接口中,可以创建一个动态SQL查询,这个查询会在插入完成后返回所有刚插入的对象集合。
例如:
```xml
<mapper namespace="com.example.YourMapper">
<resultMap id="yourResultMap" type="YourEntity">
<id column="id" property="id"/>
<!-- 其他属性映射 -->
</resultMap>
<insert id="batchInsertAndGetIds" parameterType="java.util.List">
INSERT INTO your_table (column1, column2) VALUES
<foreach item="item" index="index" collection="list" open="(" separator="), (" close=")">
#{item.column1}, #{item.column2}
</foreach>
SELECT * FROM your_table WHERE id IN (
<foreach item="item" index="index" collection="list" open="(" separator="), (" close=")">
#{item.id}
</foreach>
)
</insert>
</mapper>
```
然后在服务层,你可以像这样调用:
```java
List<YourEntity> entities = new ArrayList<>();
// 遍历并填充entities List
List<YourEntity> idsAndEntities = yourMapper.batchInsertAndGetIds(entities);
```
在这里,`idsAndEntities` 就是一个包含了刚刚插入的实体以及它们的主键的新列表。
阅读全文