Mybatis中使用selectKey标签得到新增数据的主键

应用场景

一般作为insert标签的子标签使用,用于获取新增数据的自增主键信息

selectKey属性介绍

属性描述
keyPropertyselectKey语句结果应该被设置的目标对象属性(java对象对应数据库主键的属性)
resultType结果的类型。MyBatis 通常可以算出来,写上也没有问题
order可以被设置为 BEFORE 或 AFTER。如果设置为 BEFORE,会首先得到主键,并赋值给参数类型对象的keyProperty属性,然后再执行插入语句。如果设置为 AFTER,会先执行插入语句,然后执行selectKey得到主键
statementType和前面的相同,MyBatis 支持 STATEMENT ,PREPARED 和CALLABLE 语句的映射类型,分别代表 PreparedStatement 和CallableStatement 类型

注意:
(1)myBatis允许任何简单类型作为主键的类型,主要是整型、字符串等
(2)在mysql、sql server这样支持主键自增的数据库中,order属性设置为AFTER,才能得到正确的主键值;oracle数据库中,order属性需要设置为BEFORE,否则会报错

示例

<!--新增信息,并拿到新增数据的主键信息。新增数据,得到主键的外层写法没什么特别,跟普通的insert一样。只不过里面加了selectKey-->
<!--selectKey 会将 SELECT LAST_INSERT_ID()的结果放入到传入的model的主键里面,keyProperty 对应的model中的主键的属性名,这里是 user 中的id,因为它跟数据库的主键对应。order AFTER 表示 SELECT LAST_INSERT_ID() 在insert执行之后执行,多用与自增主键,BEFORE 表示 SELECT LAST_INSERT_ID() 在insert执行之前执行,这样的话就拿不到主键了,这种适合那种主键不是自增的类型-->
<insert id="insertAndgetkey" parameterType="com.soft.mybatis.model.User">
	<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
      		SELECT LAST_INSERT_ID()
	</selectKey>
  insert into t_user (username,password,create_date) values(#{username},#{password},#{createDate})
</insert>

重点:
(1)Mybatis执行完插入语句后,自动将自增长值赋值给对象的指定属性id。因此,可通过使用对象指定属性的getter方法获取自动增长的返回值
(2)实际调用的插入方法的返回值,代表受影响的数据库记录行数,而不是自增主键的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值