您的位置:首页 > 数据库 > Oracle

Unable to make batch insert into Oracle DB using MyBatis

2017-12-29 20:17 459 查看
I try to make batch insert into table at Oracle database using MyBatis (integrated with Spring) .

It is a definition of method in mapper interface:

public void savePayments(@Param(“payments”) List payments);

It is a MyBatis XML mapper code:

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


When I execute this I receive MyBatisSystemException with message “nested exception is org.apache.ibatis.builder.BuilderException: Improper inline parameter map format. Should be: #{propName,attr1=val1,attr2=val2}”

What is wrong? How to fix it?

I found that the first answer doesn’t work for me, then i find another solution as below:

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


from: https://stackoverflow.com/questions/26278531/unable-to-make-batch-insert-into-oracle-db-using-mybatis/34398186#34398186
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mybatis spring oracle batch
相关文章推荐