← 返回首页
MybatisPlus基础教程(四)
发表时间:2020-03-29 00:44:03
讲解MybatisPlus的主键策略

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 接口来进行扩展):