【SpringBoot】Mybatis执行insert/update后如何获得主键id

这篇具有很好参考价值的文章主要介绍了【SpringBoot】Mybatis执行insert/update后如何获得主键id。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、背景

在业务开发的时候,由于MyBatis框架的insert语句默认是不返回记录的主键值,而是返回插入的记录条数的,但是如果业务层需要得到插入数据的主键时候,可以通过配置的方式来实现获取插入数据的ID功能。

二、如何解决

方法1、开启useGeneratedKeys属性方法

<!--
      useGeneratedKeys="true" 开启新增主键返回功能
      keyProperty="id" user实体主键属性
      keyColumn="id" user表中主键列
  -->
  <insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
     insert into user(username,password) values (#{username},#{password})
  </insert>

方法2、使用<selectKey>和 order="AFTER"方式

  <!--
      keyColumn="id" user表中主键列
      keyProperty="id" user实体主键属性
      resultType="int" user实体主键属性类型
      order="AFTER" 表示此标签内部sql语句在insert执行之前(执行),还是之后执行(执行)
        AFTER  之后执行【在自增主键时】
        BEFORE 之前执行【使用指定主键时】
  -->
  <insert id="insertUser" parameterType="User" >
    <selectKey keyColumn="id" keyProperty="id" resultType="int" order="AFTER">
      SELECT LAST_INSERT_ID()
    </selectKey>
    insert into user(username,password) values(#{username},#{password})
  </insert>

三、Java调用

在java中调用时候,怎么拿到自增主键?

错误拿取:

int i = tableDataMapper.insertMaster(masterSQL);

System.out.println("主键:"+i); //返回的依旧是 0 或者 1 ,代表执行成功或失败

正确拿取:

tableDataMapper.insertMaster(masterSQL);

System.out.println("主键:"+masterSQL.getId()); //因为上面说了,mybatis会把自增id封装在你的入参bean的指定字段中,所以应该从 入参.get(指定字段) 去获取

四、注意

1、这两种方式都仅支持主键自增类型的数据库 MySQL 和 SqlServer,Oracle不支持,并且设置的ID是自增类型的才行;

2、如果使用INSERT一条语句插入多行数据时, LAST_INSERT_ID() 只会返回插入的第一行数据时产生的值。比如我使用INSERT一次插入了 4 条数据,它们的 id 分别是 1,2,3,4,那么最后返回的ID还是 1 这个值。文章来源地址https://www.toymoban.com/news/detail-503498.html

到了这里,关于【SpringBoot】Mybatis执行insert/update后如何获得主键id的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • myBatis plus 调用基本方法(insert update.... ) Invalid bound statement (not found)

    直接调用BaseMapper 或者 是Iservice 里面的方法报如下错,大概率是依赖版本冲突 我的依赖版本如下,解决了这个问题 “org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)” 错误通常表示在 MyBatis 中找不到有效的绑定语句。 这个错误可能有以下几个可能的原因: SQL

    2024年02月13日
    浏览(56)
  • SpringBoot中使用@Insert、@Update实现批量新增、更新

    数据库原始表数据 数据层接口 注意 : @Param(“list”) 引号中和foreach 中 collection 属性值必须写list,否则报错。item属性值写实体类的类名,首字母必须小写 接口测试: 由于在Apifox中是没有对应List的数据类型因此需要我们自己手写body形式 – json例如: 除了使用接口测试工具验证

    2024年02月09日
    浏览(46)
  • 如何在Insert插入操作之后,获取自增主键的ID值

    MyBatis中,在大多数情况下,我们向数据库中插入一条数据之后,并不需要关注这条新插入数据的主键ID。我们也知道,正常在DAO中的插入语句虽然可以返回一个int类型的值,但是这个值表示的是插入影响的行数,而不是新插入数据的主键ID。 近期有一个需求,核心是保存一些

    2024年02月09日
    浏览(47)
  • mybatis执行自带update方法遇到的坑

            项目上需要对已有oracle数据源进行兼容改造,兼容doris数据源。改造过程中发现,启动项目时有一个类内部执行updateByPrimaryKeySelective时异常。把日志打印出的SQL复制到doris数据库执行,提示的错误与项目内一致,说明错误是数据库级别的,而非项目内部问题。错误

    2024年02月09日
    浏览(24)
  • springboot~mybatis中使用selectKey获取自增主键

    在mybatis中,我们在insert操作之后,可以获取到自增主键的值,这个需要我们用到 这个方法,在使用时有一个坑需要注意,一会儿会说到。 假设我们有数据表id_offset,然后id是自增主键 我们在插入数据后,希望得到这个新插入的主键的值 我们不希望通过两条语句实现,因为这

    2024年02月14日
    浏览(40)
  • 【postgresql 基础入门】UPSERT语句,INSERT违反约束条件时可以转变为UPDATE语句,UPDATE与INSERT的合体

    ​ 专栏内容 : postgresql内核源码分析 手写数据库toadb 并发编程 个人主页 :我的主页 管理社区 :开源数据库 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 入门准备 postgrersql基础架构 快速使用 初始化集群 数据库服务管理 psql客户端使用 pgAdmin图形化客户端

    2024年03月12日
    浏览(49)
  • FieldFill.INSERT与FieldFill.UPDATE使用

    首先在bean对象的class里面对应字段上面加上 或者 如果需要同时指定新增和修改 则添加 然后添加下配置类

    2024年02月16日
    浏览(44)
  • SQL注入_insert&delete&update&selete

    一. SQL注入介绍 1.1 sql注入概念 1.1.1 sql注入的实质:数据库将用户输入的数据当作代码执行 1.1.2 sql注入产生的条件 用户能控制输入 原本程序要执行的代码,拼接了用户输入的数据然后进行执行 1.2 sql注入注入点判断 1.2.1 判断是否存在可控变量 抓包判断 如图所示,id=1与subm

    2023年04月16日
    浏览(36)
  • MySQL修炼手册7:数据修改基础:INSERT、UPDATE、DELETE语句详解

    在掌握了MySQL数据库的基础之后,学习如何对数据进行有效的修改是至关重要的。本篇博客旨在提供一个深入的指南,涵盖了数据修改的三大基础操作:插入(INSERT)、更新(UPDATE)、删除(DELETE)。为了更好地理解这些概念,我们首先创建一个示例表“水果表”,然后逐一

    2024年01月17日
    浏览(75)
  • MyBatis 中如何执行 SQL 语句

    MyBatis 是一个基于 Java 的持久层框架,它提供了多种方式来执行 SQL 语句,包括直接使用 SqlSession 执行、使用映射器(Mapper)执行、使用 SqlSessionTemplate 执行等。本文将介绍 MyBatis 中常见的 SQL 执行方式及其使用方法。 在 MyBatis 中,可以通过 SqlSession 对象直接执行 SQL 语句。S

    2024年02月13日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包