一、需求:新增用户后,同时还要返回当前新增用户的id值
id是由数据库的自动增长来实现的,所以就相当于我们要在新增后将自动增长auto_increment
的值返回。
<insert id="saveUser" parameterType="USER">
<!-- 配置保存时获取插入的id -->
<selectKey keyColumn="id" keyProperty="id" resultType="int">
select last_insert_id() as id;
</selectKey>
insert into user(username,birthday,sex,address)
values(#{username},#{birthday},#{sex},#{address})
</insert>
通过LAST_INSERT_ID()
获得刚插入的自动增长的id的值
或者
SELECT @@IDENTITY AS id
<insert id="saveUser" parameterType="USER">
insert into user(username,birthday,sex,address)
values(#{username},#{birthday},#{sex},#{address})
<selectKey resultClass="long" keyProperty="id">
SELECT @@IDENTITY AS id
</selectKey>
</insert>
这时也能返回新增那一条数据的id,这时的selectkey没有要求写在前面以@@
定义的变量都是系统的全局变量。
二、为什么要使用selectKey?
数据库主键包括自增和非自增,有时候新增一条数据不仅仅知道成功就行了,后边的逻辑可能还需要这个新增的主键,这时候再查询数据库就有点耗时耗力,我们可以采用selectKey来帮助我们获取新增的主键。
三、属性解析
keyProperty
结果集映射目标类的属性;
若存在多个,则使用逗号分隔;
keyColumn
目标类的属性,映射结果集的列名;
若存在多个,则使用逗号分割;
resultType
设置返回类型;
可使用全类名或者是别名;
order
设置此selectKey的执行顺序是早于sql语句,还是晚于sql语句;
候选值是BEFORE和AFTER;
statementType
设置sql语句的映射类型;候选值有:
STATEMENT,PREPARED,CALLABLE;
databaseID
与ibatis全局配置中的databaseIdProvider标签呼应