java - 无法使用 MyBatis 批量插入 Oracle DB

标签 java spring oracle mybatis ibatis

我尝试使用MyBatis(与Spring集成)批量插入Oracle数据库的表。

这是mapper接口(interface)中方法的定义:

public void savePayments(@Param("payments") List<MassPaymentItem> payments);

这是一个MyBatis XML映射器代码:

<insert id="savePayments" parameterType="MassPaymentFileItem" useGeneratedKeys="false">
    INSERT INTO mass_payments
        (payment_id, file_id, msisdn, amount, status)
    <foreach collection="payments" item="payment" index="index" separator=" UNION ALL ">
        SELECT SEQ_MASS_PAYMENT.nextval, #{payment.fileId}, #{payment.msisdn}, #{payment.amount}, 0 FROM DUAL
    </foreach>
</insert>

当我执行此操作时,我收到 MyBatisSystemException 并显示消息“嵌套异常是 org.apache.ibatis.builder.BuilderException:不正确的内联参数映射格式。应该是:#{propName,attr1=val1,attr2=val2}”

出了什么问题?如何解决?

最佳答案

我找到了解决方案here

<insert id="savePayments">
   INSERT ALL
   <foreach collection="payments" item="payment">
   INTO
      mass_payments_t (payment_id, file_id, msisdn, amount)
   VALUES
      (seq_mass_payment.nextval, #{payment.fileId, javaType=Integer, jdbcType=NUMERIC}, #{payment.msisdn, javaType=String, jdbcType=VARCHAR}, #{payment.amount, javaType=BigDecimal, jdbcType=NUMERIC})
   </foreach>
   SELECT * FROM dual
</insert>

关于java - 无法使用 MyBatis 批量插入 Oracle DB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26278531/

相关文章:

java - 使用 Spring Boot Security 在 REST API 中强制执行正确的 API key 和 JWT 用户 token

java - 当 BigDecimal 已经在 DB (Oracle) 中设置时,指定 BigDecimal 的精度和小数位数是否有意义?

java - 如何使用 JPA 在特定实体组中创建对象? (谷歌应用引擎 Java)

Java 泛型 + 构建器模式

java - 为什么 SpringBootApplication 不将我的 Controller 注册为处理程序?

java - Spring MVC 找不到映射错误

sql - 在 oracle 中使用提示

oracle - 如何根据表 FK 关系在 PL/SQL 中生成 DELETE 语句?

java - 如何使用 JobScheduler 显示 toast 消息

java - Swing:如何从 JTable 中拖动多行?