原博主地址:Mybatis-insert/update时获取被更新的字段值,selectKey标签详解_mybatis更新后获取更新值-CSDN博客
我只做了注意点添加..
场景
在业务开发的过程中,我们在进行update操作时有可能需要获取更新后的字段值进行下一步操作,这样的操作通常出现在sql对某一字段进行了运算的情况下
比如 UPDATE T_NUMBER T SET T.INS_NUMBER = T.INS_NUMBER + 1 WHERE T.ID = #{Id}
比较直接的做法是先执行update的操作,再执行get的操作,获取更新后的值,但这样不好,原因主要是
1.产生不必要代码冗余
2.在多线程情况下可能产生安全性问题
实际上可以直接通过Mybatis的selectKey标签获取指定字段的新值
有很多博客说selectKey是用来获取自增主键/主键的,实际上并不是,selectKey可以获取任意的字段/表达式的值,但有一定的限制(注意点)
******返回多条的时候selectKey中的resultType="map"
serviceImpl
NumberDo numberDo = numberMapper.getNumberById(id);
if (numberDo != null) {
numberMapper.plusNumberById(numberDo);
//注意这里怎么获取更新后的新值
return numberDo.getNumber();
}
mapper
<update id="plusNumberById" parameterType="com.coolway.testProject.dal.number.NumberDo">
<selectKey resultType="map" keyColumn="INS_NUMBER,CUSTID"
keyProperty="insNumber,custId" order="AFTER">
SELECT T.INS_NUMBER,T.CUSTID FROM T_NUMBER T WHERE T.ID = #{id}
</selectKey>
UPDATE T_NUMBER T
<set>
T.INS_NUMBER = T.INS_NUMBER + 1
</set>
WHERE T.ID = #{id}
</update>