Mybatis插入记录获取返回主键的配置方法

方法共有2种:

1. 使用JDBC方式返回主键自增的值

在配置insert时使用useGeneratedKeys属性,这种方法只适用于支持自增主键的数据库,如mysql,对于不支持自增主键的数据库不适用,如oracleuseGeneratedKeys设为true后,Mybatis会使用JDBC的getGeneratedKeys方法来取得由数据库内部生成的主键。获得主键的值后赋给keyProperty配置的"id"属性,当需要设置多个属性时使用逗号隔开,多个主键的还需要设置keyColumn属性,按顺序指定数据库的列,这里列的值会与keyProperty配置的属性一一对应。配置如下:

	<!-- 新增用户信息(返回主键,使用useGeneratedKeys方式) -->
	<insert id="insert" useGeneratedKeys="true" keyProperty="id">
		insert into sys_user(user_name, user_password, user_email, user_info, head_img, create_time) 
		values (#{userName}, #{userPassword}, #{userEmail}, #{userInfo}, #{headImg, jdbcType=BLOB}, SYSDATE())
	</insert>
  1. 使用selectKey返回主键的值
    该方式支持所有数据库,无论是自增主键还是序列主键的。配置如下:
	<!-- 新增用户信息(返回主键,使用selectKey方式) -->
	<insert id="insert">
		insert into sys_user(user_name, user_password, user_email, user_info, head_img, create_time) 
		values (#{userName}, #{userPassword}, #{userEmail}, #{userInfo}, #{headImg, jdbcType=BLOB}, SYSDATE())
		
		<!-- 返回主键 mysql的配置形式,order属性不同的数据库不同 -->
		<selectKey keyColumn="id" resultType="long" keyProperty="id" order="AFTER">
			SELECT LAST_INSERT_ID()
		</selectKey>
	</insert>

selectKey标签的keyColumn、keyProperty和上面的useGeneratedKeys的用法含义相同,这里的resultType用于设置返回值的类型。order属性的设置和使用的数据库有关。在Mysql数据库中,order属性设置为AFTER,因为当前记录的主键值在insert语句执行成功后才能获取到。而在oracle数据库中,order属性设置为BEFORE,领导为oracle需要先从序列获取值再把值插入数据库中。oracle的insert语句主键列必须写上,不然会报主键不能为空的错。
以下是其它支持自增主键的数据库配置selectKey中返回主键的SQL

数据库 主键SQL
DB2 VALUES IDENTITY_VAL_LOCAL()
MYSQL SELECT LAST_INSERT_ID()
SQLSERVER SELECT SCOPE_IDENTITY()
CLOUDSCAPE VALUES IDENTITY_VAL_LOCAL()
DERBY VALUES IDENTITY_VAL_LOCAL()
HSQLDB CALL IDENTITY()
SYBASE SELECT @@IDENTITY
DB2_MF SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1
INFORMIX select dbinfo(‘sqlca.sqlerrd1’) from systables where tabid=1

来自《Mybatis从入门到精通》刘增辉 著

猜你喜欢

转载自blog.csdn.net/q283614346/article/details/82919575
今日推荐