Mybatis妙用---持续更新

原博主地址: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>

 

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值