专栏首页电光石火mybatis获取update的id
原创

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 条评论
登录 后参与评论

相关文章

  • mybatis获取update的id

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

    似水的流年
  • mybatis获取update的id

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

    似水的流年
  • 导出表结构(数据字典)

    -- 数据字典 SELECT (case when a.colorder=1 then d.name else '' end)表名, a.co...

    似水的流年
  • mybatis获取update的id

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

    似水的流年
  • mybatis获取update的id

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

    似水的流年
  • 一道经典的MySQL面试题,答案出现三次反转

    前几天偶然看到大家在讨论一道面试题,而且答案也不够统一,我感觉蛮有意思,在此就做一个解读,整个过程中确实会有几处反转。

    jeanron100
  • MySQL复制的奇怪问题跟进

    没想到今天在做压力测试的时候,又碰到了类似的问题,这个问题的紧要程度要排上了日程。

    jeanron100
  • Echo的数据库表是如何设计的

    这个表应该是相对来说最复杂的一张了。因为不仅有评论(对帖子的评论),还有对评论的回复,都放在这一张表里面了。

    飞天小牛肉
  • Mybatis + Oracle CRUD

    Remember_Ray
  • LeetCode MySQL 1241. 每个帖子的评论数

    结果表应包含帖子的 post_id 和对应的评论数 number_of_comments 并且按 post_id 升序排列。

    Michael阿明

扫码关注云+社区

领取腾讯云代金券