如何在MyBatis中批量插入后获取主键

时间:2015-08-06 05:32:35

标签: mybatis

使用注释@Options(useGeneratedKeys = true,keyProperty =" id")来获取单个插入的生成主键对我来说很好,但是当我使用注释@InsertProvider进行批量插入时,我不知道如何获得生成的主键,任何评论将不胜感激。 thx提前

3 个答案:

答案 0 :(得分:1)

现在Mybatis 3.3.1支持它了。请参阅https://github.com/mybatis/mybatis-3/pull/547

答案 1 :(得分:1)

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;

public interface TestMapper {

  ...

  @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
  @Insert({
    "<script>",
      "INSERT INTO test_table",
        "(column_one, column_two)",
      "VALUES" +  
        "<foreach item='item' collection='list' open='' separator=',' close=''>" +
          "(" +
            "#{item.columnOne,jdbcType=VARCHAR},",
            "#{item.columnTwo,jdbcType=VARCHAR}" +
          ")" +
        "</foreach>",
    "</script>"})
  void insertBatchTestTable(@Param("list") List<TestObject> testObjs);

}

ps。:

  • 设置keyColumn和keyProperty
  • 使用@Param(“list”)
  • MyBatis将通过反射设置对象keyProperty

答案 2 :(得分:0)

我没有使用mybatis的注释,只有xml。但是,我已经同时使用了useGeneratedKeys和批量插入。

使用Mybatis,您必须执行相同的查询(一个使用useGeneratedKeys)并为集合中的每个对象重复调用插入。这会将生成的密钥映射到您的pojo。每N个记录后刷新会话,然后提交。

就是这样。我希望你没有使用Oracle作为你的数据库。因为,对于Oracle,您必须在调用insert之后进行刷新,这样才能实现批处理。