mybatis foreach 但提交单独的插入

标签 mybatis intersystems-cache

以下 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>

关于mybatis foreach 但提交单独的插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53715787/

相关文章:

java - MyBatis 上可自定义的超时时间

java 和 mybatis - 误解一对多关系 - 仅注释

spring-boot - Mybatis 和 Spring 数据与 hibernate 结合在一起

intersystems-cache - Intersystems caché - 以编程方式创建新类

sql - 最早的记录差异?

java - Mybatis几个jndi名称

java - 在 SpringBoot 和 MyBatis 应用程序中,对于动态数据源,查询总是先于 AOP 执行

javascript - 无法通过系统间缓存服务器方法设置变量值

c++ - 如何通过ODBC从系统间缓存数据库获取数据?

intersystems-cache - 当前在命名空间中枚举全局变量的首选方法是什么?