- <selectKey> 用于在插入数据时获取自动生成的主键值。在执行插入操作后,<selectKey> 可以将自动生成的主键值赋值给Java对象的属性或者直接返回给调用者。
- 使用SELECT LAST_INSERT_ID() 这个 sql 语句来获取插入记录后返回的自增id
- 在执行插入操作时,需要获取自动生成的主键值,并将其赋值给Java对象的属性。即在内部使用
示例
<insert id="insertUser" parameterType="User">
INSERT INTO users (name, age) VALUES (#{name}, #{age})
<selectKey keyProperty="id" resultType="java.lang.Integer" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
</insert>
- 在执行插入操作时,需要获取自动生成的主键值,并将其返回给调用者。即在外部使用,调用后生效
示例
<insert id="insert" parameterClass="Users" useGeneratedKeys="true" keyProperty="id">
INSERT INTO user (user_nick,tel_phone,address,status, user_type,remark, gmt_create, gmt_modified)
VALUES (#userNick#, #telPhone#, #address#, #status#, #userType#, #remark#, now(), now())
<selectKey keyProperty="id" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID() AS value
</selectKey>
</insert>
属性 |
描述 |
keyProperty |
selectKey语句结果应该被设置的目标属性。 |
resultType |
结果的类型。MyBatis 通常可以算出来;但是写上也没有问题。MyBatis 允许任何简单类型用作主键的类型,包括字符串。 这可以被设置为BEFORE或AFTER。如果设置为BEFORE,那么它会首先选择主键,设置keyProperty 然后执行插入语句。如果设置为 |
order |
AFTER/BEFORE 如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素-这和如 Oracle 数据库相似,可以在插入语句中嵌入序列调用 SelectKey需要注意order属性,像Mysql一类支持自动增长类型的数据库中,order需要设置为after才会取到正确的值 |
statementType |
和前面的相同,MyBatis 支持STATEMENT ,PREPARED和CALLABLE语句的映射类型分别代表PreparedStatement和CallableStatement类型。 |
keyColumn |
返回结果集中生成列属性的列名。如果生成列不止一个,可以用逗号分隔多个属性名称。 |