主键策略介绍
-
IdType.AUTO
:数据库自增,需要数据库支持自增长特性。 -
IdType.NONE
:未设置主键生成策略,需要开发者手动设置ID。 -
IdType.ASSIGN_ID
:使用雪花算法生成主键,适用于分布式系统,跨服务器部署。 -
IdType.ASSIGN_UUID
:使用Java UUID生成主键。 -
IdType.ID_WORKER
:已经被Mybatis-plus官方淘汰,推荐使用IdType.ASSIGN_ID
代替。 -
IdType.ID_WORKER_STR
:已经被Mybatis-plus官方淘汰,推荐使用IdType.ASSIGN_ID
代替。
老版本配置
MyBatis-Plus支持在实体类属性上使用@TableId
注解指定主键生成策略。当使用雪花算法生成唯一主键时,需要使用IdType.ID_WORKER
属性值指定。在数据库中,字段类型可以选择CHAR(19)或者BIGINT。以下是生成主键的示例代码:
Copyimport com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
@Data
public class User {
// 指定使用雪花算法生成主键
@TableId(type = IdType.ID_WORKER)
private Long id;
private String name;
private Integer age;
}
新版本配置
在MyBatis-Plus 3.x版本及以上,IdType
的枚举值支持了雪花算法的变体版本ID_WORKER_STR,它会根据字段类型自动选择CHAR(19)或VARCHAR(50)。实体类代码示例如下:
Copyimport com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
@Data
public class User {
// 指定使用雪花算法生成主键,并自动选择CHAR(19)或VARCHAR(50)
@TableId(type = IdType.ASSIGN_ID)
private String id;
private String name;
private Integer age;
}
全局配置
Mybatis-plus提供了全局配置主键的方式,即在代码中进行全局统一的主键配置,避免每个实体类中都需要单独配置主键的繁琐操作。具体步骤如下:
在application.yml
或application.properties
中,设置全局的Mybatis-plus配置:
Copymybatis-plus:
global-config:
db-config:
id-type: assign_id # 设置全局的主键生成策略为雪花算法
在实体类中,不需要再单独配置主键生成策略,可以直接使用注解@TableId
指定主键属性,并通过value
属性指定主键字段名称即可:
public class User {
@TableId(value = "id")
private Long id;
private String name;
private Integer age;
private String email;
}
测试代码
@Test
void testInsertUser() {
User user = new User();
user.setName("king");
user.setAge(19);
int insert = userMapper.insert(user);
System.out.println("insert = " + insert);
}
测试结果: