mybatis的insert插入后获取自增id的方法详解(从controller到mapper)

 更新时间:2023年10月17日 11:24:56   作者:拄杖盲学轻声码  
这篇文章主要介绍了mybatis的insert插入后获取自增id的示例代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

需求说明:当执行插入操作的时候,其中数据包含两个模块,分别存放在两种数据库表中,拿表A,表B来说。
表A为基本信息表,其中插入时候有自增id,也就是每新增一条数据后下一个id都会自动加1。
表B为详情表,其中有个字段为A_id与A表中的id是一样的,也就是他们的关联字段。

那么问题就来了:如果你在新增数据的时候,你发现基本信息和详情的数据都是在一个页面中,也是同时传递到后端接口中,那么我们势必会有个先后,必须要有A表中的id,那样的话B表中的数据才能够对应入库,不然所属关联关系就会乱,这样也会影响功能,废话不多说,直接上代码。

Controller.java代码模块(也可以写在service,看个人习惯)

//数据新增
//先将基本数据入库  
res = service.insertbase(po);
int id =po.getId();
newid = id;
//然后获取id再将另一部分数据入另一张表

Mapper.xml代码模块

<insert id="insertbase" parameterType="alertmodelPo" useGeneratedKeys="true" keyProperty="po.id">
        insert into A(profile_name,use_flag, create_by, create_date, remark)
        values (#{po.profile_name},'1', #{po.create_by}, now(), #{po.remark})
        <selectKey order="AFTER" resultType="java.lang.Integer" keyProperty="po.id">
            select last_value from A_id_seq
        </selectKey>
 </insert>

keyProperty:默认为unset,主要用于设置getGeneratedKeys方法或selectKey子元素返回值将赋值到领域模型的哪个属性中。

useGeneratedKeys:取值范围true|false(默认值),设置是否使用JDBC的。

其中主要是先执行插入操作,然后再从表序列中查询出最新的数据,也就是last_value,这个地方存在一个情况就是表的数据最好不要直接库操作表插入,不然会影响这个表的序列,当然重置表序列等操作可以看我之前写的博客,里面有详细介绍。

操作过程可能遇到的问题:

Id值取不到之情况1:keyProperty的值直接写id没有写po.id。

本质原因,因为keyProperty的值是对象的属性值,不是数据表中的字段名。

Id值取不到之情况2:在dao层的入参处没有声明@Param(“po”)从而导致po.id的值获取不到,也就是说这个没声名的话mapper里面就不知道你的po是什么值,就会报错no getter ‘po’……..。

本质原因,对@Param的理解不够。

后话:

*之前网上很多都是没有下面selectKey的标签,我发现这个不写的话会存在版本兼容,报下面这个错误,所以没有用网上的那些方法,上面的我写的方法反正百试不爽。所以还是用我的方法吧。

Returning autogenerated keys is only supported for 8.2 and later servers.

以上就是mybatis的insert插入后获取自增id的方法详解(从controller到mapper)的详细内容,更多关于mybatis insert获取自增id的资料请关注脚本之家其它相关文章!

相关文章

  • 浅谈一下单体架构的缺点是什么

    浅谈一下单体架构的缺点是什么

    这篇文章主要介绍了单体架构的缺点是什么,通常我们所使用的传统单体应用架构都是模块化的设计逻辑,程序在编写完成后会被打包并部署为一个具体的应用,而应用的格式则依赖于相应的应用语言和框架,需要的朋友可以参考下
    2023-04-04
  • java webApp异步上传图片实现代码

    java webApp异步上传图片实现代码

    这篇文章主要为大家详细介绍了java webApp异步上传图片实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Spring关于@Configuration配置处理流程

    Spring关于@Configuration配置处理流程

    这篇文章主要介绍了Spring关于@Configuration配置处理流程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • JAVA时间存储类Period和Duration使用详解

    JAVA时间存储类Period和Duration使用详解

    这篇文章主要为大家介绍了JAVA时间存储类Period和Duration使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Spring Boot项目如何优雅实现Excel导入与导出功能

    Spring Boot项目如何优雅实现Excel导入与导出功能

    在我们平时工作中经常会遇到要操作Excel的功能,比如导出个用户信息或者订单信息的Excel报表,下面这篇文章主要给大家介绍了关于Spring Boot项目中如何优雅实现Excel导入与导出功能的相关资料,需要的朋友可以参考下
    2022-06-06
  • Java校验银行卡是否正确的核心代码

    Java校验银行卡是否正确的核心代码

    这篇文章主要介绍了Java校验银行卡是否正确的核心代码,需要的朋友可以参考下
    2017-01-01
  • 使用Springboot整合Apollo配置中心

    使用Springboot整合Apollo配置中心

    这篇文章主要介绍了使用Springboot整合Apollo配置中心的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • 基于Spire.Doc for Java实现HTML转PDF的操作方案

    基于Spire.Doc for Java实现HTML转PDF的操作方案

    本文记录了使用Spire.DocforJava将HTML内容转换为PDF文档的过程,包括环境准备、两种常见的转换场景、进阶设置以及注意事项,适用于样式复杂度相对可控、排版以文档流为主的转换需求,需要的朋友可以参考下
    2026-04-04
  • 解决idea创建版本时只有Java21和Java17选项

    解决idea创建版本时只有Java21和Java17选项

    你是否在使用IntelliJ IDEA创建新项目时遇到了只有Java 21和Java 17的选项?别担心,我们的指南将为你提供解决方案,通过简单的步骤,你将能够选择你需要的任何Java版本,继续阅读,让我们开始吧!
    2024-03-03
  • IntelliJ IDEA 2021.3 正式发布之支持远程开发、IDE故障排查等多项优化改进

    IntelliJ IDEA 2021.3 正式发布之支持远程开发、IDE故障排查等多项优化改进

    IntelliJ IDEA 2021.3 正式发布:支持远程开发、IDE故障排查等多项优化改进问题,在这个版本中的远程开发还不是一个正式版本,而是BETA版,但通过这个BETA版本,也可以体验IDEA“远程开发”给我们带来的全新体验
    2021-12-12

最新评论