目录
问题场景:
在本周用到了两表同时更新数据这与我之前的两表同删数据的逻辑差不多但是也有不同的地方,在此次也动了一点点小脑筋
描述:
在这样的两张表中表A表B中的字段名是不同的,但是他们的数据是相同的,表A更新数据的同时表B也随之跟新数据,这时我就很疑惑了,但是我只前做过两表同删的业务,这个我就想效仿一下一下删除的原理来搞一下.
误区:
在出现这问题时,我也看了一下网上的搜寻结果,不知道是不是我的方式不对,大多都给我的答案是用sql写两表同时更新的sql,我在之后也尝试了一下可以实现但是却没有我的方法简单,希望我的分享能够帮助到有此类业务问题的人
分析问题:
如图当我们的跟新数据时我们就利用事物的特性对我们的业务进行处理来解决这个问题
代码展示:
来上我们的sql:(以这里的表A表B为例)
表A:
表A:
<update id="updateTableA">
UPDATE tableA
<set>
<if test="name != null">
name = #{name},
</if>
<if test="age!= null">
age= #{age},
</if>
</set>
WHERE id = #{id}
</update>
表B:
这里要动一下脑筋了,以为你表B的数据是来自表A的所以你更改的字段的值要对应表一对应的值
所以:姓名-->{name} 年龄-->{age}
表B:
<update id="updateTableB">
UPDATE tableB
<set>
<if test="name != null">
姓名= #{name},
</if>
<if test="!= null">
年龄= #{age},
</if>
</set>
WHERE id = #{id}
</update>
来看一下业务层代码:
public Map<String,Object>updateDouble(TableA tableA){
Map<String,Object> data = new HashMap<String,Object>()
int result = tableAMapper.updateTableA(tableA);
int results = tableBMapper.updateTableB(tableA);
if(result == 0){
data.put("code",0);
data.put("msg","更新失败!");
logger.error("用户[更新],结果=更新失败!");
return data;
}
data.put("code",1);
data.put("msg","更新成功!");
logger.info("用户[更新],结果=更新成功!");
return data;
}
}
在经过逻辑层代码的时候根据我们的事物的执行如果表A执行成功那么表B也应执行完成,反之失败也同理,我们的同步更新数据就很好的解决了