返回顶部
首页 > 资讯 > 后端开发 > Python >mybatis 获取更新(update)记录的id之<selectKey>用法说明
  • 719
分享到

mybatis 获取更新(update)记录的id之<selectKey>用法说明

2024-04-02 19:04:59 719人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录获取更新(update)记录的id之<selecTKEy>问题简介解决 获取update 纪录的id详解<selectKey>标签的含义获取更新

获取更新(update)记录的id之<selectKey>

问题

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}

<selectKey>标签的含义

MyBatis 标签

这个标签主要用于Insert数据时不支持主键自动生成的问题

selectKey keyProperty=”m_Id” order=”AFTER” resultType=”int”>
select LAST_INSERT_ID()
selectKey>

SelectKey需要注意order属性。像Mysql一类支持自动增长类型的数据库中,order需要设置为after才会取到正确的值。

oracle这样取序列的情况,需要设置为before,否则会报错

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: mybatis 获取更新(update)记录的id之<selectKey>用法说明

本文链接: https://lsjlt.com/news/149296.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作