<update id="batchAddOrUpdatePayment"> <choose> <when test="item.id == null"> insert into contract_payment (contract_id, `type`, payment_time, payment_amount, remark, creator_id, creator_name,file_path) values <foreach collection="list" separator="," item="item"> (#{item.contractId}, #{item.type}, #{item.paymentTime}, #{item.paymentAmount}, #{item.remark}, #{item.creatorId}, #{item.creatorName},#{item.filePath}) </foreach> </when> <otherwise> UPDATE contract_payment SET `payment_time` = values(payment_time), `payment_amount` = values(payment_amount), `remark` = values(remark), `file_path` = values(file_path) WHERE id=#{id} </otherwise> </choose> </update> 帮我修正
时间: 2024-02-10 21:05:58 浏览: 66
在Spring中用select last_insert_id()时遇到问题
这段代码存在一些问题,以下是修正后的代码:
```xml
<update id="batchAddOrUpdatePayment">
<choose>
<when test="item.id == null">
INSERT INTO contract_payment (
contract_id, `type`, payment_time, payment_amount,
remark, creator_id, creator_name, file_path
)
VALUES
<foreach collection="list" separator="," item="item">
(
#{item.contractId}, #{item.type}, #{item.paymentTime},
#{item.paymentAmount}, #{item.remark}, #{item.creatorId},
#{item.creatorName}, #{item.filePath}
)
</foreach>
</when>
<otherwise>
<foreach collection="list" separator=";" item="item">
UPDATE contract_payment
SET
`payment_time` = #{item.paymentTime},
`payment_amount` = #{item.paymentAmount},
`remark` = #{item.remark},
`file_path` = #{item.filePath}
WHERE id = #{item.id}
</foreach>
</otherwise>
</choose>
</update>
```
修正说明:
1. 代码缺少一些必要的空格和换行,导致代码可读性较差,我在修正中添加了一些空格和换行,让代码更易读。
2. 当更新多个记录时,原始代码中使用了 `values` 关键字,这是错误的,我在修正中使用了多个 `update` 语句,每个语句只更新一个记录。
3. 在更新语句中,原始代码中使用了 `WHERE id=#{id}`,这是错误的,因为 `id` 并没有在 `<foreach>` 中使用,我在修正中使用了 `WHERE id=#{item.id}`,正确地使用了 `item.id`。
阅读全文