Mybatis-Plus提供了五种主键生成策略, 如下: - IdType.AUTO - IdType.ASSIGN_ID - IdType.ASSIGN_UUID - IdType.INPUT - IdType.NONE
1.自增策略 要想主键自增需要配置如下主键策略
1)需要在创建数据表的时候设置主键自增,或者使用JPA的@Id和@GeneratedValue(strategy = GenerationType.IDENTITY)注解。
2)实体字段中配置 @TableId(type = IdType.AUTO)
例如:
@Data
@Entity
public class Users {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) //auto_increment类型
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
}
要想影响所有实体的配置,可以设置全局主键配置。 在application.properties中配置:
#全局设置主键生成策略
mybatis-plus.global-config.db-config.id-type=auto
2.MyBatis-Plus主键策略
如果想使用MybatisPlus的主键策略。得从两方面来考虑: 1)如果主键是整型
使用IdType.ASSIGN_ID策略(自 3.3.0 起),该策略会使用雪花算法自动生成主键 ID,主键类型为 Long 或 String
例如:
@Data
@Entity
public class Users {
@Id
@TableId(type = IdType.ASSIGN_ID)
private Long id;
private String name;
private Integer age;
private String email;
}
2)如果主键是字符串类型
使用 IdType.ASSIGN_UUID 策略,则会自动生成不含中划线的 UUID 作为主键,主键类型为 String。
例如:
@Data
@Entity
public class Users {
@Id
@TableId(type = IdType.ASSIGN_UUID)
private String id;
private String name;
private Integer age;
private String email;
}
其它主键策略:分析 IdType 源码可知:
public enum IdType {
//数据库ID自增
AUTO(0),
//该类型为未设置主键类型
NONE(1),
//该类型可以通过自己注册自动填充插件进行填充
INPUT(2),
//全局唯一ID (idWorker),适合整型
ID_WORKER(3),
//全局唯一ID (UUID)
UUID(4),
//字符串全局唯一ID (idWorker 的字符串表示)
ID_WORKER_STR(5);
private int key;
private IdType(int key) {
this.key = key;
}
public int getKey() {
return this.key;
}
}
3)如果使用自定义的输入策略
如果不想使用数据库的自增主键,也可以使用INPUT进行自己传递主键即可,进行插入工作,但在插入之前一定要检查数据库是否已经存在了该主键。
例如:
@Data
@Entity
public class Users {
@Id
@TableId(type = IdType.INPUT)
private String id;
private String name;
private Integer age;
private String email;
}
Mybatis-Plus 内置了如下数据库主键序列(如果内置支持不满足你的需求,可实现 IKeyGenerator 接口来进行扩展):