MyBatis更新获取update记录 - 极悦
首页 课程 师资 教程 报名

MyBatis更新获取update记录

  • 2021-07-06 16:13:04
  • 3127次 极悦

用mybatis update记录,更新过后想要更新记录的id怎么办?

平常我门都是更新数据,用更新的条件再查询一次,得到更新的记录。这样我门就进行了两次数据库操作,链接了两次数据库。增加了接口的处理事件,因为链接数据库是很耗时的操作。

简介

其实可以通过mybatis的selectKey标签来解决这个问题。

selectKey这个标签大家基本上都用过,比如在插入数据的时候,返回插入数据的纪录。如:

 <selectKey resultType="int" order="AFTER" keyProperty="id">
            SELECT LAST_INSERT_ID()
 </selectKey>
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。

    <update id="updateByUserName" parameterType="com.test.bean.People">
 <selectKey keyProperty='id' resultType='int' order='BEFORE'>
            SELECT
            (select id FROM people WHERE
             name = #{name})id
            from DUAL
  </selectKey>
        UPDATE people SET
      email=#{email}
        WHERE
       name =#{name}
  </update>

上述代码就是通过selectKey实现了通过People的name去更新People的email,并获取被更新纪录的id。

详解

 <selectKey keyProperty='id' resultType='int' order='BEFORE'>

此处的 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}

以上就是极悦小编介绍的"MyBatis更新获取update记录",希望对大家有帮助,想了解更多可查看Mybatis基础教程,如有疑问,请在线咨询,有专业老师随时为您服务。

选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交