Mybatis实现插入数据后返回主键过程解析

 更新时间:2020年06月02日 11:00:00   作者:_dafeng  
这篇文章主要介绍了Mybatis实现插入数据后返回主键过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

添加记录后获取主键ID,这是一个很常见的需求,特别是在一次前端调用中需要插入多个表的场景。

除了添加单条记录时获取主键值,有时候可能需要获取批量添加记录时各记录的主键值,MyBatis从3.3.1版本开始支持批量添加记录并返回各记录主键字段值。

一、获取新添加记录主键字段值

注意: 在MyBatis中添加操作返回的是记录数并非记录主键id。

如果需要获取新添加记录的主键值,需要在执行添加操作之后,直接读取Java对象的主键属性。

Integer rows = sqlSession.getMapper(UserMapper.class).insertUser(user);
System.out.println("rows = " + rows); // 添加操作返回记录数
System.out.println("id = " + user.getId()); // 执行添加操作之后通过Java对象获取主键属性值

二、在映射器中配置获取记录主键值

1.xml映射器

在定义xml映射器时设置属性useGeneratedKeys值为true,并分别指定属性keyProperty和keyColumn为对应的数据库记录主键字段与Java对象的主键属性。

1.1 插入单条记录

<mapper namespace="com.dafeng.dao.mapper">
	<!-- 插入数据:返回记录主键id值 -->
	<insert id="insertUser" parameterType="com.dafeng.model.User" useGeneratedKeys="true" keyProperty="id" keyColumn="id" >
	  insert into user(name,age,create_time,update_time) values(#{name},#{age},now(),now())
	</insert>
</mapper>

1.2 插入多条记录

<!-- 批量添加数据,并返回主键字段 -->
<insert id="insertBatchUser" useGeneratedKeys="true" keyProperty="id">
  INSERT INTO user(name,age,create_time,update_time) VALUES
    <foreach collection="list" separator="," item="u">
    (#{u.name},#{u.age},now(),now())
    </foreach>
</insert>

2.接口映射器

在接口映射器中通过注解@Options分别设置参数useGeneratedKeys,keyProperty,keyColumn值

2.1 插入单条记录

// 返回主键字段id值
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
@Insert("insert into user(name,age,create_time,update_time) values(#{name},#{age},now(),now())")
Integer insertUser(User user);

2.2 插入多条记录

如果希望执行批量添加并返回各记录主键字段值,只能在xml映射器中实现,在接口映射器中无法做到。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java线程休眠的5种方法

    Java线程休眠的5种方法

    这篇文章主要介绍了Java线程休眠的5种方法,分别是Thread.sleep、TimeUnit、wait、Condition、LockSupport,下面文章将对这五种方法进行详细讲解,需要的小伙伴可以参考一下
    2022-05-05
  • Java与Http协议的详细介绍

    Java与Http协议的详细介绍

    这篇文章主要介绍了Java与Http协议的详细介绍的相关资料,这里提供实例来帮助大家学习理解这部分内容,需要的朋友可以参考下
    2017-09-09
  • Java数组动态增加容量过程解析

    Java数组动态增加容量过程解析

    这篇文章主要介绍了Java数组动态增加容量过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Java replaceAll()方法报错Illegal group reference的解决办法

    Java replaceAll()方法报错Illegal group reference的解决办法

    这篇文章主要给大家介绍了关于Java replaceAll()方法报错Illegal group reference的解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • java中JsonObject与JsonArray转换方法实例

    java中JsonObject与JsonArray转换方法实例

    在项目日常开发中常常会遇到JSONArray和JSONObject的转换,很多公司刚入职的小萌新会卡在这里,下面这篇文章主要给大家介绍了关于java中JsonObject与JsonArray转换方法的相关资料,需要的朋友可以参考下
    2023-04-04
  • 浅谈java中的对象、类、与方法的重载

    浅谈java中的对象、类、与方法的重载

    本文主要对java中的对象、类、与方法的重载进行简要概述,具有一定的参考价值,需要的朋友一起来看下吧
    2016-12-12
  • 图解Java中插入排序算法的原理与实现

    图解Java中插入排序算法的原理与实现

    插入排序的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。本文将通过图片详解插入排序的原理及实现,需要的可以参考一下
    2022-08-08
  • java的Arrays工具类实战

    java的Arrays工具类实战

    java.util.Arrays类能方便地操作数组,它提供的所有方法都是静态的。Arrays作为一个工具类,能很好的操作数组。下面介绍主要使用的几个函数
    2016-12-12
  • SpringBoot应用监控Actuator使用隐患及解决方案

    SpringBoot应用监控Actuator使用隐患及解决方案

    SpringBoot的Actuator 模块提供了生产级别的功能,比如健康检查,审计,指标收集,HTTP 跟踪等,帮助我们监控和管理Spring Boot 应用,本文将给大家介绍SpringBoot应用监控Actuator使用隐患及解决方案,需要的朋友可以参考下
    2024-07-07
  • SpringBoot server.port配置原理详解

    SpringBoot server.port配置原理详解

    这篇文章主要介绍了Spring Boot server.port配置原理详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12

最新评论