主键策略介绍 IdType.AUTO:数据库自增,需要数据库支持自增长特性。 IdType.NONE:未设置主键生成策略,需要开发者手动设置ID。 IdType.ASSIGN_ID:使用雪花算法生成主键,适用于分布式系统
主键策略介绍
-
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); }测试结果: