现有user表,userId为用户id,做为数据表user的主键:
由于userId不可以重复,而这里userId直接作为主键。为防止并发操作,插入语句可以这样设计:不存在userId则插入,否则更新:
insert into user
userId,
nickName,
role,
createTime,
updateTime,
nickNameUpdateTime,
nickNameCreateTime,
#{userId,jdbcType=VARCHAR},
#{nickName,jdbcType=VARCHAR},
#{role,jdbcType=VARCHAR},
#{createTime,jdbcType=TIMESTAMP},
#{updateTime,jdbcType=TIMESTAMP},
#{nickNameUpdateTime,jdbcType=TIMESTAMP},
#{nickNameCreateTime,jdbcType=TIMESTAMP},
ON DUPLICATE KEY UPDATE
updateTime=#{updateTime,jdbcType=TIMESTAMP}
,nickName=#{nickName,jdbcType=VARCHAR}
,role = #{role,jdbcType=VARCHAR}
,nickNameUpdateTime=#{nickNameUpdateTime,jdbcType=TIMESTAMP}
,nickNameCreateTime = #{nickNameCreateTime,jdbcType=TIMESTAMP}
on udplicate key update后的内容表示,主键存在时则执行更新操作,需要注意的是insert字段中需要含有唯一性字段(主键索引或唯一索引)。
再如:
insert into t_product (
id,
intention_code,
add_type,
product_id,
sbom_code,
sbom_name)
values (#{id},#{intentionCode,jdbcType=VARCHAR}, #{addType,jdbcType=INTEGER}, #{productId,jdbcType=BIGINT}, #{sbomCode,jdbcType=VARCHAR}, #{sbomName,jdbcType=VARCHAR}})
ON DUPLICATE KEY UPDATE
product_id = VALUES(product_id),
sbom_name = VALUES(sbom_name),
price = VALUES(price))
多条记录仅仅是多了foreach 标签:
insert into t_xxx (
id,
intention_code,
add_type,
product_id,
sbom_code,
sbom_name
)
values
( #{item.id},#{item.intentionCode,jdbcType=VARCHAR},
#{item.addType,jdbcType=INTEGER},
#{item.productId,jdbcType=BIGINT},
#{item.sbomCode,jdbcType=VARCHAR},
#{item.sbomName,jdbcType=VARCHAR}
)
ON DUPLICATE KEY UPDATE
product_id = VALUES(product_id),
sbom_name = VALUES(sbom_name)