MyBatis返回主键Id, MyBatis 插入数据返回主键Id

本文详细介绍了在MyBatis中如何配置返回主键ID,适用于支持和不支持自动生成主键的数据库,以及多行批量插入数据的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         MyBatis返回主键Id, MyBatis 插入数据返回主键Id

 

一、业务场景

1、如用户表User添加一个新用户后,同时需要添加子表user_files,记录用户上传的多个附件。而 user表id是user_files表的外键。

2、假设User表id是由数据库自增的,在使用MyBatis 完成向User表插入数据后,需要将id返回回来,在MyBatis中如何配置呢?

 

二、数据库支持生成主键

1、如: MySQL 和 SQL Server

2、MyBatis DAO xml 如下:

<insert id="insert"	useGeneratedKeys="true" keyProperty="id" keyColumn="id">
	INSERT INTO user (username,password)
 	VALUES (#{username},#{password})
</insert>

 

三、数据库不支持生成主键

1、针对数据库不支持生成主键或不使用数据库生成的主键

2、MyBatis DAO xml 如下:

<insert id="insert"	useGeneratedKeys="true" keyProperty="id" keyColumn="id">
	 <selectKey keyProperty="id" resultType="java.lang.String" order="BEFORE">
		 SELECT UUID() FROM DUAL 
	 </selectKey>
	INSERT INTO user (id , username,password)
  	VALUES (#{id} , #{username},#{password})
</insert>

 

3、selectKey 元素的属性理解:

属性

描述

keyPropertyselectKey 语句结果应该被设置的目标属性。如果希望得到多个生成的列,
也可以是逗号分隔的属性名称列表。
keyColumn匹配属性的返回结果集中的列名称。如果希望得到多个生成的列,
也可以是逗号分隔的属性名称列表。
resultType结果的类型。MyBatis 通常可以推断出来,但是为了更加精确,写上也不会有什么
问题。MyBatis 允许将任何简单类型用作主键的类型,包括字符串。如果希望作用
于多个生成的列,则可以使用一个包含期望属性的 Object 或一个 Map。
order这可以被设置为 BEFORE 或 AFTER。如果设置为 BEFORE,那么它会首先生成
主键,设置 keyProperty 然后执行插入语句。如果设置为 AFTER,那么先执行插入
语句,然后是 selectKey 中的语句 - 这和 Oracle 数据库的行为相似,在插入语句内
部可能有嵌入索引调用。
statementType与前面相同,MyBatis 支持 STATEMENT,PREPARED 和 CALLABLE 语句的映射
类型,分别代表 PreparedStatement 和 CallableStatement 类型。

 

四、MyBatis多行批量插入数据

<insert id="insertAuthor" useGeneratedKeys="true"  keyProperty="id">
  insert into Author (username, password, email, bio) values
  <foreach item="item" collection="list" separator=",">
    (#{item.username}, #{item.password}, #{item.email}, #{item.bio})
  </foreach>
</insert>

 

 

参考资料:MyBatis 官方文档

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值