赞
踩
了解 Mybatis-Plus 它的主键生成算法
long
类型的Java 长整型数字核心思想:使用
41 bit
作为 毫秒数,10 bit
作为机器 ID(5个bit是数据中心,5个bit是机器ID),12 bit
作为 毫秒内的流水号(意味着每个节点在每毫秒可以产生4096个ID),最后还有一个符号位,永远是0,几乎可以保证全球唯一 !
此处接的是上一篇 MyBatis-Plus
博文的数据库和代码
@Test
void testInsert(){
User user = new User();
user.setName("CSNZ");
user.setAge(21);
int res = userMapper.insert(user);
System.out.println(res);
}
@TableId(type = IdType.ID_WORKER)
此时这个 id 就是雪花ID ❄
设置id主键自增
,再插入试试@TableId(type = IdType.AUTO)
IdType
的属性值默认为 AUTO
实现雪花id
@TableId(type = IdType.ID_WORKER)
如果想实现主键自增
@TableId(type = IdType.AUTO)
TableId
究竟是啥玩意儿~value
属性和 type
属性,并且type
属性的默认值为 NONE
进一步可以看到
IdType
又是一个枚举类MyBatis-Plus 的主键生成策略 就是取决于这些枚举变量!
public enum IdType { /** * 数据库ID自增,数据库需要支持主键自增(如MySQL),并设置主键自增 */ AUTO(0), /** * 该类型为未设置主键类型,默认使用雪花算法生成 */ NONE(1), /** * 用户输入ID,数据类型和数据库保持一致就行 * <p>该类型可以通过自己注册自动填充插件进行填充</p> */ INPUT(2), /* 以下3种类型、只有当插入对象ID 为空,才自动填充。 */ /** * 全局唯一ID (idWorker),数值类型 数据库中也必须是数值类型 否则会报错 */ ID_WORKER(3), /** * 全局唯一ID (UUID,不含中划线) */ UUID(4), /** * 字符串全局唯一ID (idWorker 的字符串表示),数据库也要保证一样字符类型 */ ID_WORKER_STR(5); }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。