查询更新用法
今天看到mybatis里面有个update更新语句,看到使用了selectKey,一时没搞懂有什么作用。查阅此作用,才发现这个用法真的很不错,再此记录下。
sql 查询更新写法
- 更新数据
- 查询更新数据
注意:这是2条sql,如果在项目里需要连接2次数据库
mybatis 更新查询写法
<update id="update" parameterType="Object" >
<selectKey keyProperty='id' resultType='int' order='BEFORE'>
SELECT
(select id FROM a WHERE
id = #{id})id
from DUAL
</selectKey>
UPDATE a
SET a.a= #{A},
a.b= #{B}
WHERE id = #{id}
</update>
解析:
<selectKey keyProperty='id' resultType='int' order='BEFORE'>
此处的 keyProperty=’id’ 是指将查询出来的id 映射到传入update 的Object 的id 。类型为int
SELECT
(select id FROM a WHERE
id = #{id})id
from DUAL
此 SELECT 就是为了获取 被更新的 Object 的id 外边包装一个虚表查询是当 id = #{id} 查询不到纪录时不会报空纪录,会返回 null ,这个就很关键了。
当返回空记录的时候 mybatis会报错,说不能转换成 int 型。
当返回null的时候就会转换成int 的 0 。不会报错,代表没有查到。
优化点:
- 减少连接数据库次数。
- 简单逻辑可以不使用spring事务,达到预期目的。