mybatis主键自动生成
时间: 2023-11-17 08:00:47 浏览: 142
MyBatis主键自动生成是指在向数据库插入数据时,自动为主键生成一个唯一的值。MyBatis提供了三种主键自动生成策略:使用SELECT LAST_INSERT_ID()、使用SELECT SEQ.nextval FROM DUAL、使用UUID。其中,使用SELECT LAST_INSERT_ID()是MySQL和SQL Server数据库的默认策略,而使用SELECT SEQ.nextval FROM DUAL是Oracle数据库的默认策略。此外,MyBatis还提供了一种更加灵活的方式,即使用useGeneratedKeys和keyProperty属性来实现主键自动生成。在使用这种方式时,需要在插入语句中添加useGeneratedKeys="true"和keyProperty="主键属性名"两个属性。
相关问题
mybatis主键生成
### MyBatis 中主键生成策略
#### JDBC 方式返回主键自增值
当使用 MySQL 或其他支持自动增长列的数据库时,可以利用 `useGeneratedKeys` 属性让 MyBatis 获取由数据库生成的主键值。这通常用于表中有 AUTO_INCREMENT 类型的字段情况。
```xml
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
INSERT INTO users(name, age) VALUES (#{name}, #{age})
</insert>
```
此配置使得执行插入操作后,MyBatis 将会把新产生的 ID 赋给 Java 对象对应的属性[^1]。
#### 自定义 SQL 表达式获取主键
对于那些不支持自动增量特性的数据库,或者希望手动控制主键分配的情况,则可通过 `<selectKey>` 元素来自定义主键生成逻辑:
```xml
<insert id="insertBlogPostWithSelectKey">
<selectKey resultType="int" keyProperty="blogId" order="BEFORE">
SELECT seq_blog.nextval FROM DUAL
</selectKey>
insert into Blog(id,title,content)
values(#{blogId},#{title},#{content});
</insert>
```
这里展示了如何通过 Oracle 序列对象来预先设定即将插入记录的主键值[^4]。
#### 使用 UUID 作为唯一标识符
除了依赖于底层数据库机制外,还可以采用应用程序层面的方法生成全局唯一的主键,比如基于时间戳和随机数组合而成的字符串形式——UUID:
```java
public class User {
private String id;
public void setId() {
this.id = java.util.UUID.randomUUID().toString();
}
}
```
这种方式适用于分布式环境中跨多个实例部署的应用程序场景下保持数据一致性需求[^2]。
#### 雪花算法(Snowflake Algorithm)
最后,在某些框架扩展版本如 MyBatis Plus 中,默认采用了 Twitter 开源的 SnowFlake 算法实现高效并发环境下的唯一ID生产器。该方案综合考虑了机器编号、数据中心编码等因素以确保最终产出的结果既有序又不会重复[^3]。
mybatis 支持主键自动生成
是的,MyBatis支持主键自动生成。在MyBatis中,可以使用自增主键、UUID、雪花算法等方式来实现主键的自动生成。
对于自增主键,可以在数据库表的主键字段上设置为自增类型,然后在映射文件中配置对应的主键生成策略。例如,在MySQL中可以使用AUTO_INCREMENT来实现自增主键,在映射文件中可以使用<selectKey>元素来配置主键生成策略。
对于UUID主键,可以在表的主键字段上设置为CHAR(36)类型,然后在插入数据时使用UUID.randomUUID().toString()来生成唯一的主键值。
对于雪花算法主键,***
阅读全文
相关推荐














