阅读 87

MybatisPlus CRUD扩展(一)

Insert插入

//测试插入   @Test   public void testInsert() {       User user = new User();       user.setName("zbc");       user.setAge(20);       user.setEmail("test@163.com");          //帮我们自动生成id       int result = userMapper.insert(user);       //受影响的行数       System.out.println(result);       //发现,id会自动回填       System.out.println(user);   } 复制代码

Creating a new SqlSession SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@18715bb] was not registered for synchronization because synchronization is not active JDBC Connection [HikariProxyConnection@1180105925 wrapping com.mysql.cj.jdbc.ConnectionImpl@2c16677c] will not be managed by Spring ==>  Preparing: INSERT INTO user ( id, name, age, email ) VALUES ( ?, ?, ?, ? )  ==> Parameters: 1456795944390905857(Long), zbc(String), 20(Integer), test@163.com(String) <==    Updates: 1 Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@18715bb] 1 User(id=1456795944390905857, name=zbc, age=20, email=test@163.com) 复制代码

数据库插入的id是全局唯一id1456795944390905857是基于雪花算法生成。

主键生成策略

MybatisPlus中关于主键生成策略有一个专门的注解(@TableId)

@Documented   @Retention(RetentionPolicy.RUNTIME)   @Target({ElementType.FIELD})   public @interface TableId {       String value() default "";          IdType type() default IdType.NONE;   } 复制代码

IdType是策略的类型

public enum IdType {       AUTO(0),       NONE(1),       INPUT(2),       ASSIGN_ID(3),       ASSIGN_UUID(4);          private final int key;     } 复制代码

  • AUTO:数据库ID自增

    • 需要在实体类字段上添加@TableId(type = IdType.AUTO)

    • 数据库字段也必须是自增。

    • 再次测试,我们发现id自增1

  • NONE: 默认方案,未设置主键

  • INPUT:插入前手动设置主键,一旦设置之后就需要配置id

  • ASSIGN_ID:分配ID(主键类型为Number(LongInteger)或String)(since 3.3.0),使用接口IdentifierGenerator的方法nextId(默认实现类为DefaultIdentifierGenerator雪花算法)

  • ASSIGN_UUID:分配UUID,主键类型为String(since 3.3.0),使用接口IdentifierGenerator的方法nextUUID(默认default方法)

  • ID_WORKER:分布式全局唯一ID,主键类型Long,后续建议使用ASSIGN_ID

  • UUID32UUID字符串,主键类型String,后续建议使用ASSIGN_UUID

  • ID_WORKER_STR:分布式全局唯一ID,主键类型String,后续建议使用ASSIGN_ID

雪花算法:snowflakeTwitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096ID),最后还有一个符号位,永远是0。可以保证几乎全球唯一。

UUID:国际标准化组织ISO提出的一个概念,是一个128bit的数字,也可以表现为3216进制的字符,中间用-分割。

  • 时间戳+UUID版本号,分三段占16个字符(60bit+4bit),

  • Clock Sequence号与保留字段,占4个字符(13bit3bit),

  • 节点标识占12个字符(48bit),

  • 示例:3F2504E0-4F89-11D3-9A0C-0305E82C3301


作者:万恶的沫白
链接:https://juejin.cn/post/7027791340553535525

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐