之前面试中遇到过这个问题,当时没有回答上来,现在做下笔记记录一下。
主键生成有两种方式:
1、主键自增长,这种是需要得到插入成功后数据库生成的id。
2、自定义主键(使用UUID或其他方式),这种一般是现在java代码中生成id,然后存入数据库。
MyBatis 中主键回填的两种实现方式:
1、推荐方式:
<insert id="insert" useGeneratedKeys="true" keyProperty="id">
insert into t_user (name,password) values (#{name}, #{password});
</insert>
设置useGeneratedKeys=“true”,设置keyProperty=“id”,接收回传主键的属性id,成功后id的值就是回传主键的值。
2、使用 MySQL的 LAST_INSERT_ID()
<insert id="insert" parameterType="com.xxx.xxxx.pojo.User">
insert into t_user (name) values (#{user.name})
<selectKey resultType="Integer" order="AFTER" keyProperty="user.userId">
SELECT LAST_INSERT_ID() AS userId
</selectKey>
</insert>
这里是用User类接收,也可自定义属性接收。