以下 mybatis 映射适用于我们支持的所有数据库,除了一个。这是因为该数据库不允许批量插入方法(Intersystems Cache)。因此,我想提交单独的插入语句而不是一个。我如何构造这个 mybatis 语句,以便它仍然从我的 java.util.List 中读取,但它执行多个插入?

  <insert id="bulkInsert" parameterType="java.util.List" > 
    <foreach collection="list" item="resource" index="index"> 
      INSERT INTO ${prefix}ACT_APP_DEPLOYMENT_RESOURCE(ID_, NAME_, RESOURCE_BYTES_, DEPLOYMENT_ID_) VALUES 
      (#{resource.id, jdbcType=VARCHAR}, 
      #{resource.name, jdbcType=VARCHAR}, 
      #{resource.bytes, jdbcType=${blobType}}, 
      #{resource.deploymentId, jdbcType=VARCHAR}) 
    </foreach> 
  </insert> 

请您参考如下方法:

如果您使用的是 Java 8+ 版本,您可以像这样在映射器中使用默认方法:

interface MyMapper { 
    void insertResource(@Param("resource") MyResource resource); 
 
    default void bulkInsert(List<MyResource> resources) { 
         for(MyResource resource:resources) { 
             insertResource(resource); 
         } 
    } 
} 

并修改映射器xml:

<insert id="insertResource"> 
    INSERT INTO ${prefix}ACT_APP_DEPLOYMENT_RESOURCE(ID_, NAME_, RESOURCE_BYTES_, DEPLOYMENT_ID_) VALUES 
    (#{resource.id, jdbcType=VARCHAR}, 
    #{resource.name, jdbcType=VARCHAR}, 
    #{resource.bytes, jdbcType=${blobType}}, 
    #{resource.deploymentId, jdbcType=VARCHAR}) 
</insert> 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!