主键返回 ‹selectKey›

Exisi 2021-03-27 07:29:10
Categories: Tags:
  • <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 允许任何简单类型用作主键的类型,包括字符串。

这可以被设置为BEFOREAFTER。如果设置为BEFORE,那么它会首先选择主键,设置keyProperty 然后执行插入语句。如果设置为

order

AFTER/BEFORE

如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素-这和如 Oracle 数据库相似,可以在插入语句中嵌入序列调用

SelectKey需要注意order属性,像Mysql一类支持自动增长类型的数据库中,order需要设置为after才会取到正确的值

statementType

和前面的相同,MyBatis 支持STATEMENT ,PREPAREDCALLABLE语句的映射类型分别代表PreparedStatementCallableStatement类型。

keyColumn

返回结果集中生成列属性的列名。如果生成列不止一个,可以用逗号分隔多个属性名称。