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
DB2VALUES IDENTITY_VAL_LOCAL()
MYSQLSELECT LAST_INSERT_ID()
SQLSERVERSELECT SCOPE_IDENTITY()
CLOUDSCAPEVALUES IDENTITY_VAL_LOCAL()
DERBYVALUES IDENTITY_VAL_LOCAL()
HSQLDBCALL IDENTITY()
SYBASESELECT @@IDENTITY
DB2_MFSELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1
INFORMIXselect dbinfo(‘sqlca.sqlerrd1’) from systables where tabid=1

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值