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 属性。

写更新语句,并将更新的纪录的ID 返回出来。 通过 test 的name 去更新 test 的email,并获取被更新纪录的id。

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

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

原理

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

此处的 keyProperty=’id’ 是指将查询出来的id 映射到传入updateByUserName 的test 的id 。类型为int 因为可能查到name 以后可能会修改name 所以order=’BEFORE’ 要在执行update之前进行查询,并把id返回出来。 SELECT     (select id FROM test WHERE     name = #{name})id from DUAL  此 SELECT 就是为了获取 被更新的 test的id 外边包装一个虚表查询是当 name = #{name} 查询不到纪录时不会报空纪录,会返回 null ,这个就很关键了。 当返回空记录的时候 mybatis会报错,说不能转换成 int 型。  当返回null的时候就会转换成int 的 0 。不会报错,代表没有查到。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

一文说尽 MySQL 优化原理

2998
来自专栏软件开发

一个小时学会MySQL数据库

随着移动互联网的结束与人工智能的到来大数据变成越来越重要,下一个成功者应该是拥有海量数据的,数据与数据库你应该知道。 一、数据库概要 数据库(Database)...

3248
来自专栏java一日一条

你不得不知道的 MySQL 优化原理

说起MySQL的查询优化,相信大家收藏了一堆奇淫技巧:不能使用SELECT *、不使用NULL字段、合理创建索引、为字段选择合适的数据类型….. 你是否真的理解...

1212
来自专栏杨建荣的学习笔记

有趣的rownum测试(r10笔记第49天)

rownum在平时的使用中总是一个很自然的语法。如果说这个rownum是否有规律,可能很多人都会模棱两可。到底是还是不是呢,我们来做几个测试来说明。 这个结果也...

34512
来自专栏IT技术精选文摘

MySQL优化原理学习

说起MySQL的查询优化,相信大家收藏了一堆奇技淫巧:不能使用SELECT *、不使用NULL字段、合理创建索引、为字段选择合适的数据类型….. 你是否真的理解...

2975
来自专栏程序员宝库

我必须得告诉大家的 MySQL 优化原理

说起MySQL的查询优化,相信大家收藏了一堆奇技淫巧:不能使用SELECT *、不使用NULL字段、合理创建索引、为字段选择合适的数据类型….. 你是否真的理解...

1714
来自专栏PHP在线

MySQL SQL语句优化的10条建议

1、将经常要用到的字段(比如经常要用这些字段来排序,或者用来做搜索),则最好将这些字段设为索引 2、字段的种类尽可能用int或者tinyint类型。另外字段尽可...

3175
来自专栏java思维导图

不得不告诉大家的 MySQL 优化“套路”

你是否真的理解这些优化技巧?是否理解它背后的工作原理?在实际场景下性能真有提升吗?我想未必。

1533
来自专栏Java帮帮-微信公众号-技术文章全总结

Web-第二十四天 Oracle学习【悟空教程】

ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S...

2862
来自专栏王旭的专栏

Web 开发 MYSQL 常用方法整理 (上)

最近在记录Web开发MYSQL常用方法,本篇记录希望数据插入、数据查询这两方面,,后面还会对数据更新以及如何在SQL中实现排行进行整理,希望对初期接触Web 开...

4750

扫码关注云+社区

领取腾讯云代金券