【问题标题】:How to get primary keys after batch insert in MyBatisMyBatis批量插入后如何获取主键
【发布时间】:2017-11-15 01:57:03
【问题描述】:

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

【问题讨论】:

    标签: mybatis


    【解决方案1】:

    现在Mybatis 3.3.1已经支持了。请看https://github.com/mybatis/mybatis-3/pull/547

    【讨论】:

      【解决方案2】:
      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

      【讨论】:

        【解决方案3】:

        mybatis我没用过注解,只有xml。但是,我同时使用了 useGeneratedKeys 和批量插入。

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

        就是这样。我希望你没有使用 Oracle 作为你的数据库。因为,使用 Oracle,您必须在调用 insert 后刷新,这不符合批处理的目的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-06-22
          • 2023-03-16
          • 1970-01-01
          • 1970-01-01
          • 2019-04-23
          • 2011-09-11
          相关资源
          最近更新 更多