<insert id="insertUser" parameterType="User" useGeneratedKeys="true"> insert into user (name, age) values (#{name}, #{age})</insert>
设置 keyProperty 属性
keyProperty 属性的浸染是指定主键 ID 赋值的目标属性。在配置文件中,我们可以在 insert 元素中设置 keyProperty 属性:
<insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyProperty="id"> insert into user (name, age) values (#{name}, #{age})</insert>
利用 JDBC 的 getGeneratedKeys 方法获取主键 ID 的办法非常大略,但须要把稳的是,该方法只适用于支持自动天生主键的数据库,如 MySQL、Oracle 等。
对付不支持 JDBC 的 getGeneratedKeys 方法的数据库,我们可以利用 SELECT LAST_INSERT_ID() 函数获取插入记录的主键 ID。在 MyBatis 中,我们可以通过设置 useGeneratedKeys 和 keyProperty 属性来利用该方法。

设置 useGeneratedKeys 属性
在配置文件中,我们可以在 insert 元素中设置 useGeneratedKeys 属性,并将其值设为 false:
<insert id="insertUser" parameterType="User" useGeneratedKeys="false"> insert into user (name, age) values (#{name}, #{age}) <selectKey resultType="java.lang.Integer" keyProperty="id" order="AFTER"> SELECT LAST_INSERT_ID() </selectKey></insert>
利用 SELECT LAST_INSERT_ID() 函数
在 insert 元素结束后,我们可以利用 SELECT LAST_INSERT_ID() 函数获取插入记录的主键 ID:
<insert id="insertUser" parameterType="User" useGeneratedKeys="false"> insert into user (name, age) values (#{name}, #{age}) <selectKey resultType="java.lang.Integer" keyProperty="id" order="AFTER"> SELECT LAST_INSERT_ID() </selectKey></insert>
利用 SELECT LAST_INSERT_ID() 函数获取主键 ID 的办法也比较大略,但须要把稳的是,该方法只适用于支持 SELECT LAST_INSERT_ID() 函数的数据库,如 MySQL 等。
三、利用 UUID 作为主键在某些情形下,我们可能并不须要数据库自动天生主键,而是须要自定义主键。在这种情形下,我们可以利用 UUID 作为主键,MyBatis 中也供应了相应的支持。
定义主键为 UUID在定义表构造时,我们可以将主键定义为 UUID 类型:
CREATE TABLE user ( id VARCHAR(36) PRIMARY KEY, name VARCHAR(20), age INT);
利用 UUID 天生主键
在 MyBatis 中,我们可以利用 UUID 天生主键,并将其赋值给工具的 id 属性。在配置文件中,我们可以在 insert 元素中利用 selectKey 元向来天生主键:
<insert id="insertUser" parameterType="User"> <selectKey resultType="java.lang.String" keyProperty="id" order="BEFORE"> SELECT UUID() </selectKey> insert into user (id, name, age) values (#{id}, #{name}, #{age})</insert>
在 selectKey 元素中,我们利用 SELECT UUID() 函数天生主键,并将其赋值给工具的 id 属性。这样,在实行插入操作时,id 属性就会被赋值为天生的 UUID。
利用 UUID 作为主键的办法可以灵巧地知足不同的需求,但须要把稳的是,在某些场景下,UUID 的性能可能不如自增主键。