MyBatis插入数据返回主键

<insert id="getGeneratedKey3" parameterType="cn.kolbe.mybatis.domain.User">
	<!-- 使用这种方式要注意,resultType是要设置的,否则将抛异常,该值对应的User类中的主键类型 -->
	<!-- keyProperty对应的是User类中的主键名,假设取名为user_id,则这边也要改成user_id -->
	<selectKey keyProperty="id" resultType="int">
		select LAST_INSERT_ID()
	</selectKey>
	insert into users(name, password) values(#{name}, #{password})	
</insert>

注:

1)使用selectKey的方式获取主键,相当于调用了MySql的LAST_INSERT_ID()函数,意思是查询最后一次插入的ID,相当于执行了两条语句2)两种方式的主键获取方式都是通过MyBatis为我们自动将id值赋值给传入的javaBean,而不是通过update语句返回,也就是update返回的同jdbc一致(影响的行数),获取id的方式是执行完update后调用user.getId()方法,具体可参看上面的例子。

<span style="font-size:10px;"><selectKey keyProperty="id" order="BEFORE" resultType="int">    </span>
<span style="font-size:10px;"><span style="white-space:pre">	</span>select stu_id_sequence.nextval from dual  </span>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size:10px;"></selectKey> </span><span style="font-size: 15px;"> </span></span>
<span style="font-size:10px;"><insert id="add" parameterType="EStudent">
  // 下面是SQLServer获取最近一次插入记录的主键值的方式
  <selectKey resultType="_long" keyProperty="id" order="AFTER">
    select @@IDENTITY as id
  </selectKey>
  insert into TStudent(name, age) values(#{name}, #{age})
</insert></span>
2.数据库(如Oracle)不支持auto-generated key field的情况

<span style="font-size:10px;"><insert id="add" parameterType="EStudent">
  <selectKey keyProperty="id" resultType="_long" order="BEFORE">
    select CAST(RANDOM * 100000 as INTEGER) a FROM SYSTEM.SYSDUMMY1
  </selectKey>
  insert into TStudent(id, name, age) values(#{id}, #{name}, #{age})
</insert</span>
五、 selectKey子元素 详解                            
作用:在insert元素和update元素中插入查询语句。
 其属性如下:
<span style="white-space:pre">	</span>keyProperty ,默认值unset,用于设置getGeneratedKeys方法或selectKey子元素返回值将赋值到领域模型的哪个属性中
<span style="white-space:pre">	</span>resultType ,keyPropety所指向的属性类全限定类名或类型别名
<span style="white-space:pre">	</span> order属性 ,取值范围BEFORE|AFTER,指定是在insert语句前还是后执行selectKey操作
<span style="white-space:pre">	</span>statementType ,取值范围STATEMENT,PREPARED(默认值),CALLABLE
<span style="white-space:pre">	</span>注意:selectKey操作会将操作查询结果赋值到insert元素的parameterType的入参实例下对应的属性中。并提供给insert语句使用






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值