Mybatis如何获取生成的主键?
时间: 2023-12-01 09:03:47 浏览: 26
在 MyBatis 中,可以使用 selectKey 元素来获取生成的主键。举个例子,如果你有一个参数类型为 User 的 insert 语句,可以这样写:
<insert id="insertUser" parameterType="User">
<selectKey keyProperty="id" resultType="int" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
insert into user(name) values(#{name})
</insert>
在这个例子中,我们用 selectKey 元素来执行一个查询,该查询会返回最后插入的自动生成的主键值,并把它设置到参数对象的 id 属性中。注意,keyProperty 属性指定了要设置的属性名,resultType 属性指定了返回值的类型,后面的 order 属性是必须的,因为它指定了查询语句的执行顺序。具体来说,在 insert 语句之后执行 selectKey 元素,以获取生成的主键值。
相关问题
mybatis 获取自增主键
MyBatis获取自增主键的方式有多种,这里介绍两种常用的方式。
第一种是在插入操作时,使用selectKey标签来获取自增主键。这个标签需要指定keyProperty属性,表示将获取的主键值赋值给哪个实体对象的属性中。在实际使用时,可以使用如下配置:
```
<insert id="insertUser" parameterType="com.example.User">
INSERT INTO users(name,age,email)
VALUES(#{name},#{age},#{email})
<selectKey keyProperty="id" order="AFTER" resultType="int">
SELECT LAST_INSERT_ID()
</selectKey>
</insert>
```
第二种方式是使用useGeneratedKeys标签来获取自增主键。这种方式需要在插入操作时设置useGeneratedKeys属性为true,并且指定keyColumn属性,表示将生成的主键值赋值给数据库表中的哪个列。在实际使用时,可以使用如下配置:
```
<insert id="insertUser" parameterType="com.example.User" useGeneratedKeys="true" keyColumn="id">
INSERT INTO users(name,age,email)
VALUES(#{name},#{age},#{email})
</insert>
```
需要注意的是,使用useGeneratedKeys方式获取自增主键时,需要确保数据库驱动支持JDBC 3.0以上的规范,否则可能会抛出异常。同时,在MySQL数据库中,使用useGeneratedKeys方式获取主键值可能会存在问题,可以优先使用selectKey标签的方式获取自增主键值。
Mybatis-Plus主键生成策略
Mybatis-Plus提供了多种主键生成策略,包括自增、UUID、雪花算法等。其中,雪花算法是一种分布式系统中常用的主键生成策略,可以保证在分布式系统中生成的主键不重复。具体实现方式是通过使用机器ID、数据中心ID、时间戳等信息生成一个64位的二进制数,再将其转换为字符串作为主键。在Mybatis-Plus中,使用雪花算法生成主键的示例如下:
```java
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
@Data
public class User {
@TableId(type = IdType.ASSIGN_ID) // 指定主键生成策略为雪花算法
private Long id;
private String name;
private Integer age;
}
```
在上述示例中,使用了`@TableId`注解指定了主键生成策略为雪花算法,并且使用了`IdType.ASSIGN_ID`枚举类型来表示。除了雪花算法外,Mybatis-Plus还支持其他多种主键生成策略,具体可以参考官方文档。