一.on dupdate key update 语句基本功能是:当表中没有原来记录时,就插入,有的话就更新
1,on duplicate key update 语句根据主键id来判断当前插入是否已存在。
2,已存在时,只会更新on duplicate key update之后限定的字段。
二.on duplicate key update 语句也可以根据唯一键来判断当前插入的记录是否已存在
比如唯一主键PRIMARY KEY
其实就这些东西,总结起来就是判断是否需要新增还是更新数据,可以按照主键id或者唯一键来判定
<insert id="insertOrUpdate" keyProperty="id" useGeneratedKeys="true">
INSERT INTO dst_111yao_doms.d_srcorder_trans_num(id, order_id, lock_rule_no, trans_number, trans_msg,
if_lock, time_stamp, create_time, update_time, ext1, ext2, ext3, ext4, ext5)
VALUES (#{id}, #{orderId}, #{lockRuleNo}, 1, #{transMsg}, #{ifLock}, #{timeStamp},
#{createTime}, #{updateTime}, #{ext1}, #{ext2}, #{ext3}, #{ext4}, #{ext5})
ON DUPLICATE KEY UPDATE
id = values(id) , order_id = values(order_id) ,lock_rule_no = values(lock_rule_no), trans_number = trans_number +1 ,
trans_msg = values(trans_msg) ,
<if test="ifLock != null">
if_lock = values(if_lock) ,
</if>
create_time = values(create_time) , update_time = values(update_time) , ext1 = values(ext1) , ext2 = values(ext2) , ext3 =
values(ext3) , ext4 = values(ext4) , ext5 = values(ext5)
</insert>
@Override
public boolean addTransErrorNums(Long id, String orderId, String transMsg, String lockRuleNo, int ifLock) {
DSrcorderTransNum dSrcorderTransNum = new DSrcorderTransNum();
dSrcorderTransNum.setId(id);
dSrcorderTransNum.setOrderId(orderId);
dSrcorderTransNum.setTransMsg(transMsg);
dSrcorderTransNum.setLockRuleNo(lockRuleNo);
dSrcorderTransNum.setIfLock(ifLock);
int i = this.dSrcorderTransNumMapper.insertOrUpdate(dSrcorderTransNum);
return i > 0;
}
if (dSrcorderTransNums0071 != null && dSrcorderTransNums0071.size() > 0) {
DSrcorderTransNum dSrcorderTransNum = dSrcorderTransNums0071.get(0);
Long id = dSrcorderTransNum.getId();
dSrcorderTransNumService.addTransErrorNums(id, orderId, message, lock_7_1, 0);
} else {
dSrcorderTransNumService.addTransErrorNums(null, orderId, message, lock_7_1, 0);
}
上面的代码例子:id如果传空,那么就是走新增呢,id传值,那么就是更新呢
版权声明:本文为lqq404270201原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。