这是一条插入语句:
其目的就是为了将这个role对象插入到数据库, 然后他会根据getGeneratedKeys来自动回填id.
但是, 实际工作往往不是我们想象的那么简单,需要根据一些特殊的关系设置主键id 的值。
假设我们取消表trole 的id自增的规则,我们的要求是:如果表trole 没有记录,则我们
需要设置 id=1,否则我们就取最大id加 2,来设置新的主键,对于一些特殊要求,MyBatis
也提供了应对方法。
使用如下方法:
在 MyBatis 中,<selectKey>
标签用于在执行插入语句(insert
)后获取数据库生成的主键值或者其他由数据库生成的值。这在需要将插入生成的值立即用于后续操作时非常有用。以下是 <selectKey>
标签的详细用法:
<insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
<!-- 插入语句 -->
INSERT INTO users (username, password)
VALUES (#{username}, #{password})
<selectKey keyProperty="id" resultType="int" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
</insert>
-
在
<insert>
标签中使用<selectKey>
:<insert>
标签定义了插入操作,通常会使用parameterType
指定参数类型,并设置useGeneratedKeys="true"
来告诉 MyBatis 使用数据库生成的键。- 在
<insert>
内部,可以使用<selectKey>
标签来获取生成的键值。
-
keyProperty
属性:keyProperty
指定了插入操作后,将生成的键值设置到哪个属性中。这个属性通常是你的实体类中对应的字段。
-
resultType
属性:resultType
指定了返回的结果类型。通常是主键的类型,比如int
、long
等。
-
order
属性:order
属性指定了<selectKey>
的执行顺序,可以是BEFORE
或AFTER
。在大多数情况下,使用AFTER
,表示在插入语句执行完成后执行<selectKey>
来获取生成的键值。
-
SQL 语句:
- 在
<selectKey>
标签内部,可以编写 SQL 查询语句来获取生成的键值。在 MySQL 中,通常使用SELECT LAST_INSERT_ID()
来获取最后插入行的自动生成的 ID。不同数据库的获取方式可能会有所不同,需要根据具体的数据库类型和版本进行调整。
- 在