MybatisPlus 中的主键策略:(主键是否自增,主键id怎么生成)
主键策略
我可以在我们的实体类的主键Id上使用注解@TableId表示此字段为表主键,使用Type属性指定主键设置填充的策略,Mybatis-plus默认使用的是(即我们不使用注解修饰我们的主键ID)雪花银算法
@TableId(type = IdType.ASSIGN_ID)
private String id;
-
AUTO
数据库ID自增,依赖于数据库。该类型请确保数据库设置了 ID自增 否则无效
-
NONE
未设置主键类型。若在代码中没有手动设置主键,则会根据主键的全局策略自动生成(默认的主键全局策略是基于雪花算法的自增ID)
-
INPUT
需要手动设置主键,若不设置。插入操作生成SQL语句时,主键这一列的值会是
null
。 -
ASSIGN_ID
当没有手动设置主键,即实体类中的主键属性为空时,才会自动填充,使用雪花算法
-
ASSIGN_UUID
当实体类的主键属性为空时,才会自动填充,使用UUID
AAIGN_ID(雪花算法)
MyBatis-Plus默认的主键策略是:ASSIGN_ID (使用了雪花算法)
雪花算法:分布式ID生成器
雪花算法是由Twitter公布的分布式主键生成算法,它能够保证不同表的主键的不重复性,以及相同表的主键的有序性。
AUTO自增策略
需要在创建数据表的时候设置主键自增
实体字段中配置 @TableId(type = IdType.AUTO)
全局主键策略设置
要是想要配置全局的主键策略,可以在配置文件中写入全局主键策略(全局设置了之后就不用一个个去设置了)
#全局设置主键生成策略
mybatis-plus.global-config.db-config.id-type=auto
经过测试,
1.什么都不写的情况下,前端传进controller中时候是id为null 插入失败
2.只用自己写的id生成器注解 ,注解在contoller层方法上时,前端传进controller中时候是id已经生成好,插入成功
3.在实体类的ID字段上注解 ASSIGN_ID时候,@TableId(type = IdType.ASSIGN_ID)
前端传进controller中时候是id为null 但是在mapper层进行插入语句的时候id就有值了
对于自己定义的id生成器注解
注解的使用:
注解的定义:
切面: 获取第一个参数(paramIndex=0)一般是实体类对象 例如user, 然后 定义方法名为setUserId,利用setIdByObject方法中的反射 去自动生成id。