[英]Unable to make batch insert into Oracle DB using MyBatis
我嘗試使用MyBatis(與Spring集成)在Oracle數據庫的表中進行批量插入。
它是mapper界面中方法的定義:
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}”
怎么了? 如何解決?
我在這里找到解決方案
<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>
我發現第一個答案對我不起作用,然后我找到了另一個解決方案,如下所示:
<insert id="savePayments" parameterType="java.util.List" useGeneratedKeys="true">
<selectKey resultType="java.lang.Integer" keyProperty="payment_id"
order="BEFORE">
SELECT SEQ_MASS_PAYMENT.nextval as payment_id FROM DUAL
</selectKey>
INSERT INTO mass_payments
(payment_id, file_id, msisdn, amount, status)
select SEQ_MASS_PAYMENT.nextval, A.* from (
<foreach collection="payments" item="payment" index="index" separator="UNION ALL">
SELECT
#{payment.fileId} as file_id,
#{payment.msisdn} as msisdn,
#{payment.amount} as amount,
0 as status
FROM DUAL
</foreach> ) A
</insert>
請仔細查看您的select語句。 如果需要列名或函數,則可以傳遞參數。 您應該將其更改為類似(注意from
的位置:
<foreach collection="payments" item="payment" index="index" separator=" UNION ALL ">
(SELECT SEQ_MASS_PAYMENT.nextval from DUAL), #{payment.fileId}, #{payment.msisdn}, #{payment.amount}, 0
</foreach>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.