微前端架构如何改变企业的开发模式与效率提升
1159
2022-10-04
mybatis 获取更新(update)记录的id之<selectKey>用法说明
目录获取更新(update)记录的id之
获取更新(update)记录的id之
问题
用mybatis update 记录,更新过后想要更新记录的id 怎么办?
平常我门都是更新数据,用更新的条件再查询一次,得到更新的记录。这样我门就进行了两次数据库操作,链接了两次数据库。增加了接口的处理事件,因为链接数据库是很耗时的操作。
简介
其实可以通过 mybatis 的 selectKey 标签来解决这http://个问题。
selectKey 这个标签大家基本上都用过,比如在插入数据的时候,返回插入数据的纪录。如:
SELECT LAST_INSERT_ID()
insert into 。。。。此处省略
resultType :返回的类型,为简单类型。order: 在insert into 语句执行后执行。keyProperty : 语句执行结果的 返回目标属性
SELECT LAST_INSERT_ID() 为查询主体。
此处用法用法就是当 insert into 执行后 执行 selectKey 的内容将数据库的最后一个id 查询出来映射到传入数据对像的ID 属性。
解决 获取update 纪录的id
假设我门有个 bean 为people
public class People {
private Integer id
private String name;
private String email;
...
}
现在我门写一个更新语句,并将更新的纪录的ID 返回出来。mybatis 语句如下:
通过 People 的name 去更新 People 的email,并获取被更新纪录的id。
SELECT
(select id FROM people WHERE
name = #{name})id
from DUAL
UPDATE people SET
email=#{email}
WHERE
name =#{name}
上述代码就是通过 selectKey 实现了 通过 People 的name 去更新 People 的email,并获取被更新纪录的id。
详解
此处的 keyProperty=’id’ 是指将查询出来的id 映射到传入updateByUserName 的people 的id 。类型为int
因为可能查到name 以后可能会修改name 所以order=’BEFORE’ 要在执行update之前进行查询,并把id返回出来。
SELECT
(select id FROM people WHERE
name = #{name})id
from DUAL
此 SELECT 就是为了获取 被更新的 people 的id 外边包装一个虚表查询是当 name = #{name} 查询不到纪录时不会报空纪录,会返回 null ,这个就很关键了。
当返回空记录的时候 mybatis会报错,说不能转换成 int 型。
当返回null的时候就会转换成int 的 0 。不会报错,代表没有查到。(是不是很机智?)
下边的的更新语句就不说了…
UPDATE people SET
email=#{email}
WHERE
name =#{name}
&lcUamDRYtRlt;selectKey>标签的含义
MyBatis 标签
这个标签主要用于Insert数据时不支持主键自动生成的问题
selectKey keyProperty=”m_Id” order=”AFTER” resultType=”int”>
select LAST_INSERT_ID()
selectKey>
SelectKey需要注意order属性。像mysql一类支持自动增长类型的数据库中,order需要设置为after才会取到正确的值。
像Oracle这样取序列的情况,需要设置为before,否则会报错
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~