用法

批量插入返回自增ID列表和普通插入返回自增ID是一样的,通常只需要在 mapper.xml 的 上添加属性 useGeneratedKeys=”true” keyProperty=”id” 就能实现插入成功后,mybatis 会把获得的自增ID set 到对象里,如自动 set 到 user 对象的 id 属性里,而非通过返回值获得ID或ID列表。

  1. public interface UserMapper {
  2. /**
  3. * 批量插入
  4. * @param users
  5. */
  6. void batchInsert(List<User> users);
  7. }
  1. <insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
  2. INSERT INTO `user`
  3. (
  4. username, nickname, password, email,
  5. avatar, status, created_time, created_by,
  6. updated_time, updated_by
  7. )
  8. VALUES
  9. <foreach collection="list" item="item" separator=",">
  10. (
  11. #{item.username}, #{item.nickname}, #{item.password}, #{item.email},
  12. #{item.avatar}, #{item.status}, #{item.createdTime}, #{item.createdBy},
  13. #{item.updatedTime}, #{item.updatedBy}
  14. )
  15. </foreach>
  16. </insert>

注意

关于这个批量导入返回id列表需要注意以下几点

  • 确保 mybatis 版本在 3.3.1 以上
  • batchInsert 方法上不能加 @param()
  • batchInsert 方法只能一个参数
  • batchInsert 返回值为 Integer 或 void,不能写 List
  • 如果你的自增id数据库字段和实体类属性不一致,如 user_id 和 userId, 需要写成useGeneratedKeys=”true” keyColumn=”user_id” keyProperty=”userId”