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

         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 INTO user (username,password)
 	VALUES (#{username},#{password})

 

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

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

2、MyBatis DAO xml 如下:


	 
		 SELECT UUID() FROM DUAL 
	 
	INSERT INTO user (id , username,password)
  	VALUES (#{id} , #{username},#{password})

 

3、selectKey 元素的属性理解:

属性

描述

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

 

四、MyBatis多行批量插入数据


  insert into Author (username, password, email, bio) values
  
    (#{item.username}, #{item.password}, #{item.email}, #{item.bio})
  

 

 

参考资料:MyBatis 官方文档

 

你可能感兴趣的:(Java,MyBatis)