赞
踩
在业务开发的过程中,我们在进行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可以获取任意的字段/表达式的值,但有一定的限制(注意点)
- 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="java.lang.Integer" keyColumn="INS_NUMBER"
- keyProperty="insNumber" order="AFTER">
- SELECT T.INS_NUMBER 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>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。