Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >mybatis获取update的id

mybatis获取update的id

原创
作者头像
似水的流年
发布于 2018-01-25 13:21:43
发布于 2018-01-25 13:21:43
9.9K00
代码可运行
举报
文章被收录于专栏:电光石火电光石火
运行总次数:0
代码可运行

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

其实可以通过 mybatis 的 selectKey 标签来解决这个问题。  selectKey 这个标签大家基本上都用过,比如在插入数据的时候,返回插入数据的纪录。如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 <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。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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 。不会报错,代表没有查到。

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
‍面试官问:Mybatis和Mybatis-Plus执行插入语句后可以返回主键ID吗? ‍我:看我回答...
一、Mybatis执行插入语句后可以返回主键ID吗? 在想写什么内容的时候,正好看到一个基础面试题上有这个问题,就把它记录下来了。 👨‍💻面试官:你说Mybatis执行插入语句后可以返回主键ID吗??如果能的话,能否实现一下。 🙋‍我:当然是可以的,连JDBC都能做到的事情,Mybatis也能做到的。 开始敲代码… 1.1、Mysql数据库设置ID自增情况 <insert id="insertUser" parameterType="com.crush.mybatisplus.entity.User">
宁在春
2022/10/31
3K0
‍面试官问:Mybatis和Mybatis-Plus执行插入语句后可以返回主键ID吗? ‍我:看我回答...
mybatis判断用insert还是update
在实际开发中会遇到这种情况,就是一条数据需要判断是新增还是更新,正常的开发思路是先去查询这条数据的Id是否已经存在于数据库,存在就是update,否则为insert,mybatis也是基于这样的思想实现的,下面就举个例子看一下。
用户7741497
2022/03/22
3980
mybatis框架Mapper配置详解
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
多凡
2019/11/01
7780
Mybatis(一)走进Mybatis与FisrtExample
一直在使用,从未系统的总结起来。所以这里给大家带来的是mybatis的总结,系统大家能够对这个框架有一定的系统的学习与认识。 mybatis和Hibernate应该是现在主流的ORM框架了。 mybatis学习的步骤: mybatis入门 --> 全局配置文件和映射文件详解 --> 高级映射(一对一,一对多,多对多) -->延迟加载机制 -->一级缓存, 二级缓存(整合ehcache) --> spring整合mybatis --> 逆向工程
用户1195962
2018/08/02
7250
Mybatis(一)走进Mybatis与FisrtExample
Mybatis 框架实战(上)
(2)log4j.properties https://blog.csdn.net/sinat_30185177/article/details/73550377
Jingbin
2019/04/17
3400
MyBatis框架:第四章:插入记录并返回主键
往数据库插入数据后,返回数据主键信息。有两种方法。 一种:使用insert标签中的useGeneratedKeys属性和keyProperty属性组合使用获取主键信息。 一种:使用子元素selectKey标签执行sql语句获取。
Java廖志伟
2022/09/28
1K0
Java小白学习MyBatis:Mybatis如何获取自动生成的(主)键值?
在MyBatis这样的持久层框架中,经常需要插入一条记录并取得该记录所对应的主键值。在Java开发中,默认的JDBC方式已经较为成熟地解决了这个问题,可以通过getGeneratedKeys()方法获取自动生成的主键值,而在MyBatis中,也提供了多种方式来处理自动生成主键值的问题。
用户1289394
2023/08/22
1.8K0
Java小白学习MyBatis:Mybatis如何获取自动生成的(主)键值?
Mybatis【6】-- Mybatis插入数据后自增id怎么获取?
我们知道很多时候我们有一个需求,我们需要把插入数据后的id返回来,以便我们下一次操作。
秦怀杂货店
2020/12/05
1.6K0
Mybatis【6】-- Mybatis插入数据后自增id怎么获取?
【MyBatis框架点滴】——mybatis插入数据返回主键(mysql、oracle)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/51428427
DannyHoo
2018/09/13
2.3K0
mybatis 详解(六)------通过mapper接口加载映射文件
本文介绍了如何使用 MyBatis-Plus 实现基于接口的增删改查操作,通过定义接口、实现增删改查逻辑和配置文件,完成对 User 表的增删改查操作。同时,也介绍了如何批量加载映射文件,以及接口的增删改查方法和参数详解。
IT可乐
2017/12/26
1.3K0
mybatis 详解(六)------通过mapper接口加载映射文件
Mybatis面试题
Mybatis常见面试题 #{}和${}的区别是什么? {}和${}的区别是什么? 在Mybatis中,有两种占位符 #{}解析传递进来的参数数据 ${}对传递进来的参数原样拼接在SQL中 #{}是预编译处理,${}是字符串替换。 使用#{}可以有效的防止SQL注入,提高系统安全性。 当实体类中的属性名和表中的字段名不一样 ,怎么办 ? 当实体类中的属性名和表中的字段名不一样 ,怎么办 ? 第1种: 通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致 <select id
Java3y
2018/03/15
3K0
Mybatis 动态 SQL
Mybatis 动态SQL,通过 ●if ●choose (when, otherwise) ●trim (where, set) ●foreach 等标签,可组合成非常灵活的SQL语句,从而在提高 SQL 语句的准确性的同时,也大大提高了开发人员的效率。
赵哥窟
2019/07/03
1K0
mybatis 详解(二)------入门实例(基于XML)
IT可乐
2018/01/04
8670
mybatis 详解(二)------入门实例(基于XML)
6. Mybatis映射文件深入 - 新增数据后返回主键ID - 动态SQL - SQL片段
在前面的篇章中,我们已经认识了如何使用 resultMap标签 映射查询的结果集字段、多条件查询、模糊查询。
Devops海洋的渔夫
2022/01/17
1.2K0
6. Mybatis映射文件深入 - 新增数据后返回主键ID - 动态SQL - SQL片段
MyBatis中主键回填的两种实现方式
主键回填其实是一个非常常见的需求,特别是在数据添加的过程中,我们经常需要添加完数据之后,需要获取刚刚添加的数据 id,无论是 Jdbc 还是各种各样的数据库框架都对此提供了相关的支持,本文我就来和和大家分享下数据库主键回填在 MyBatis 中的两种实现思路。
江南一点雨
2019/05/13
1.2K0
Mybatis系列第6篇:恕我直言,mybatis增删改你未必玩得转!
Mybatis系列目标:从入门开始开始掌握一个高级开发所需要的Mybatis技能。
路人甲Java
2019/12/12
2.3K0
Mybatis系列第6篇:恕我直言,mybatis增删改你未必玩得转!
mybatis的SelectKey属性的作用
SelectKey在Mybatis中是为了解决Insert数据时不支持主键自动生成的问题,他可以很随意的设置生成主键的方式。
张哥编程
2024/12/19
1940
Data Access 之 MyBatis(三) - SQL Mapping XML(Part A)
MyBatis 的真正强大在于它的语句映射,这是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 致力于减少使用成本,让开发者能更专注于 SQL 代码。
RiemannHypothesis
2022/08/19
9540
Data Access 之 MyBatis(三) - SQL Mapping XML(Part A)
Mybatis【配置文件】
映射文件 配置文件和映射文件还有挺多的属性我还没有讲的,现在就把它们一一补全 在mapper.xml文件中配置很多的sql语句,执行每个sql语句时,封装为MappedStatement对象,mapper.xml以statement为单位管理sql语句 Statement的实际位置就等于namespace+StatementId 占位符 在Mybatis中,有两种占位符 #{}解析传递进来的参数数据 ${}对传递进来的参数原样拼接在SQL中 主键生成策略 如果我们在Hibernate中,当我们插入数据的时候
Java3y
2018/03/15
1.2K0
Mybatis【配置文件】
04_MyBatis 单表 CRUD 和多表处理关联操作
单标的CRUD操作,主要根据业务如何编写高质量的SQL语句.单标操作的时候如果表中的列和实体的属性不对应的时候,建议使用别名方式进行影射处理.
全栈程序员站长
2021/07/13
5670
推荐阅读
相关推荐
‍面试官问:Mybatis和Mybatis-Plus执行插入语句后可以返回主键ID吗? ‍我:看我回答...
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验