使用mybatis添加记录的时候,有时我们可能会需要返回新加的这条记录的ID,尤其是对于自增生成的ID.
MYSQL 为我们提供了这样的函数: LAST_INSERT_ID() 返回的ID值. ID字段为AUTO_INCREMENT类型。
如下面的代码:
<insert id="saveUser" parameterType="user">
<!-- selectKey将主键返回,需要再返回 -->
<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
SELECT LAST_INSERT_ID()
</selectKey>
insert into user
(username,password,email,phone,joinTime,inviterId,cartId) values
(#{username}
,#{password},#{email},#{phone},#{joinTime},#{inviter.id,jdbcType=NVARCHAR},#{shoppingCart.id,jdbcType=NVARCHAR})
</insert>
上面为第一种方式,下面是第二种方式:
<insert id="saveUser" parameterType="user" useGeneratedKeys="true"keyProperty="id">
insert into user
(username,password,email,phone,joinTime,inviterId,cartId) values(#{username},
#{password},#{email},#{phone},#{joinTime},#{inviter.id,jdbcType=NVARCHAR},#{shoppingCart.id,jdbcType=NVARCHAR})
</insert>
上面两种方式都可以返回ID的值。
但是重要的是: 返回的ID值mybatis会自动的帮你所使用的参数的pojo类型里面的,而不是以int类型返回的 也就是:
<span style="color:#FF0000;"><strong> int n=userMapper.saveUser(user); //此处的n不是ID的值哦! 它只是用户添加成功或失败后,返回的值(0或者1)
int m=user.getId();
</strong></span>
添加之后你会发现上面的m有值了,也就是ID的值。mybatis已经自动帮你注入到pojo对象的ID里面了。