做后台接口时,经常会有插入与保存合一的接口,这时有的同学会通过判断传入的参数有没有主键id来判断应该再调用mapper中的insert还是update,其实只要在同一个statement中使用ON DUPLICATE KEY UPDATE
即可实现。该方法普通使用很简单,但是如果是批量操作接口又要怎么写呢,请继续往下看。
mybatis中批量插入数据 当主键或唯一键重复时 对数据进行更新用ON DUPLICATE KEY UPDATE来实现
<insert id="batchSaveCommissionSummaryList" parameterType="list" >
insert into commission_summary
(enterprise_id,enterprise_name,in_province_amount,in_province_rate,in_province_commission,out_province_amount,out_province_rate,
out_province_commission,total_amount,total_commission,month,create_time)
values
<foreach collection="list" item="item" index="index" separator=",">
(#{item.enterpriseId},#{item.enterpriseName},#{item.inProvinceAmount},#{item.inProvinceRate},#{item.inProvinceCommission},#{item.outProvinceAmount},
#{item.outProvinceRate},#{item.outProvinceCommission},#{item.totalAmount},#{item.totalCommission},#{item.month},#{item.createTime})
</foreach>
ON DUPLICATE KEY UPDATE
enterprise_id = values(enterprise_id),
enterprise_name = values(enterprise_name),
in_province_amount = values(in_province_amount),
in_province_rate = values(in_province_rate),
in_province_commission = values(in_province_commission),
out_province_amount = values(out_province_amount),
out_province_rate =values(out_province_rate),
out_province_commission = values(out_province_commission),
total_amount = values(total_amount),
total_commission = values(total_commission),
month = values(month),
create_time = values(create_time)
</insert>
注意values里面要用数据库字段来实现对数据的更新而不是传入的参数字段