如何在Insert插入操作之后,获取自增主键的ID值

这篇具有很好参考价值的文章主要介绍了如何在Insert插入操作之后,获取自增主键的ID值。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景说明

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

近期有一个需求,核心是保存一些巡检结果的报错信息,但是由于报错详情可能会比较多,所以计划首先将报错详情记录在一个扩展表中,然后将这个扩展表记录的主键ID保存在错误记录表中。因此这里就有一个问题,怎么在插入扩展表之后,能够直接获取到其主键ID呢?本文将简要记录两种常见的处理方式。

解决思路

不论是用哪种方式,其核心点都是:

  • 在mapper.xml文件中的插入语句中进行设置,让插入结果能够获取到主键id
  • 在调用DAO插入方法之后,从插入方法的入参DO中,获取到插入结果的主键id

配置mapper.xml

方式一

在insert里面配置“useGeneratedKeys”和“keyProperty”属性:

  • useGeneratedKeys :取值范围true|false(默认值),设置是否使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中
  • keyProperty :默认值unset,用于设置getGeneratedKeys方法或selectKey子元素返回值将赋值到DO的哪个属性中
    <insert id="insertDataErrorExtension" parameterType="com.xx.campaign.dataobject.DataErrorExtensionDO" useGeneratedKeys="true" keyProperty="id">
        insert into data_error_extension
        (group_id, page_id, module_id, tag_id, schedule_id, error_type, error_code, error_level, error_message, error_details, status, version, attr)
        values (#{groupId}, #{pageId}, #{moduleId}, #{tagId}, #{scheduleId}, #{errorType},#{errorCode}, #{errorLevel}, #{errorMessage}, #{errorDetails}, #{status}, #{version}, #{attr})
    </insert>

方式二

在Insert里面增加一个selectKey节点:

  • 节点属性:
    1. resultType: 表示返回节点值的属性;
    2. order:可以被设置为 BEFORE 或 AFTER。如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素
    3. keyProperty:selectKey 语句结果应该被设置的目标属性。
  • 节点执行语句,即应该如何获取主键id,可以尝试用下面两种方式之一:
    1. SELECT LAST_INSERT_ID()
    2. select @@IDENTITY
    <insert id="insertDataErrorExtension" parameterType="com.xx.campaign.dataobject.DataErrorExtensionDO">
        <selectKey resultType="long" order="AFTER" keyProperty="id">
            SELECT LAST_INSERT_ID()
        </selectKey>
        insert into data_error_extension
        (group_id, page_id, module_id, tag_id, schedule_id, error_type, error_code, error_level, error_message, error_details, status, version, attr)
        values (#{groupId}, #{pageId}, #{moduleId}, #{tagId}, #{scheduleId}, #{errorType},#{errorCode}, #{errorLevel}, #{errorMessage}, #{errorDetails}, #{status}, #{version}, #{attr})
    </insert>

在代码中获取主键id

这里的重点是,DAO的insert方法一定要传对应的DO对象,示例方法签名如下:

    /**
     * 插入Data error extension
     *
     * @param dataErrorExtensionDO dataErrorExtensionDO
     *
     * @return 影响行数
     *
     * @throws Exception 插入异常
     */
    Integer insertDataErrorExtension(DataErrorExtensionDO dataErrorExtensionDO) throws Exception;

然后调用DAO的insert方法后,就可以从DO对应中获取到自增主键id
如何在Insert插入操作之后,获取自增主键的ID值文章来源地址https://www.toymoban.com/news/detail-487729.html

到了这里,关于如何在Insert插入操作之后,获取自增主键的ID值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • SQL设置自增主键

    当表中字段无法充当主键或者无法设置联合主键时,可以考虑用自增序号设置主键 前提表中需要先创建一个id字段,用于充当主键,然后再进行以下操作 参数含义介绍: – 这里注意使用英文符号 – 序列重置到1000

    2024年02月13日
    浏览(30)
  • Mysql 自增主键设置以及重置自增值

            在创建需要带自增主键的表结构时,在主键上增加AUTO_INCREMENT,同时可以设置主键的启始值AUTO_INCREMENT=1。

    2024年02月12日
    浏览(21)
  • 面试官:MySQL 自增主键一定是连续的吗?大部分人都会答错!

    MySQL版本:8.0 数据库表:T (主键id,唯一索引c,普通字段d) 如果你的业务设计依赖于自增主键的连续性,这个设计假设自增主键是连续的。但实际上,这样的假设是错的,因为自增主键不能保证连续递增。 推荐一个开源免费的 Spring Boot 实战项目: https://github.com/javastacks

    2024年02月06日
    浏览(27)
  • SQL INSERT INTO 语句详解:插入新记录、多行插入和自增字段

    SQL INSERT INTO 语句用于在表中插入新记录。 INSERT INTO 语法 可以以两种方式编写INSERT INTO语句: 指定要插入的列名和值: 如果要为表的所有列添加值,则无需在SQL查询中指定列名。但是,请确保值的顺序与表中的列顺序相同。在这种情况下,INSERT INTO 语法如下: 演示数据库 以

    2024年02月05日
    浏览(48)
  • Mybatis使用insert插入后获取id值

    在mapper中定义insert方法: 属性 useGeneratedKeys:设置为true,否则无法获取到主键id。 keyProperty:实体类对象的主键id属性名称。 keyColumn:数据库中主键id字段名称。 调用orderMapper.insertOrder(record)执行插入语句,返回值是一个int类型,如果成功返回的是1,失败返回的是exception。 插

    2024年02月16日
    浏览(32)
  • 【SpringBoot】Mybatis执行insert/update后如何获得主键id

    在业务开发的时候,由于MyBatis框架的insert语句默认是不返回记录的主键值,而是返回插入的记录条数的,但是如果业务层需要得到插入数据的主键时候,可以通过配置的方式来实现获取插入数据的ID功能。 方法1、开启useGeneratedKeys属性方法 方法2、使用selectKey和 order=\\\"AFTER\\\"方式

    2024年02月11日
    浏览(32)
  • 5.4 如何在Mybatis中使用insert标签并返回主键id?-- 教你通用做法

    通过 《上文》,我们学会了XML映射文件Mapper的创建,以及最常用的select标签和resultMap标签,本文主要讲解 insert标签 ,用于和insert SQL语句映射,非常简单上手,只有两个点可以扩展讲讲:一个点是 insert后返回主键id(会介绍两种方式) ,另外一个点是 实现批量添加 ,原本打算

    2024年02月06日
    浏览(27)
  • Delphi 中操作MS SQL Server 返回刚插入的自增ID列值

    在开发数据库的应用的时候,经常需要写入日志,比如某个日志需要记录用户打开程序的时间和用户关闭程序的时间,显然这是两个动作,因为用户打开程序可能需要使用一段时间才会关闭。那么当用户打开程序时,我们首先就需要插入一条日志记录,记录下当前用户打开的

    2024年02月11日
    浏览(34)
  • 使用mybatis进行数据插入时如何返回自增的id

    当我们存储数据时,有时候id是选择让数据库自增的 。但前端如果需要当前添加数据的id时,我们在代码上就无法返回了。 在 MyBatis 中,可以通过配置来确保数据库操作成功。具体方式是在 Mapper.xml 文件中使用 useGeneratedKeys 和 keyProperty 属性来获取自增主键的值,以判断插入操

    2024年02月12日
    浏览(30)
  • mysql表主键自增过大问题

    问题及项目环境   问题 最近在做项目时,发现我创建的每一个表的主键设置自增,在插入数据数据时会出现 自增值过大的问题。 问题展示: 在后端执行Basemapper中的insert()方法时,数据库中的主键id字段为下: 且我在对应的实体类的设置为下:  我们的期望时看到Id = 1,而不是

    2024年02月16日
    浏览(34)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包