Mybatis-Plus 插入测试、雪花算法及不同主键自增策略

插入用户(测试)

    @Test
    void insert() {
        // 插入用户
        User user = new User();
        user.setAge(111);
        user.setName("小学生");
        user.setEmail("123321123321@qq.com");
        int insert = userMapper.insert(user);
        System.out.println(insert);
    }

测试结果:

数据库插入的id为全局默认的id(ID_WORKER) 

雪花算法 

 所有生成的id按时间趋势递增 整个分布式系统内不会产生重复id(因为有datacenterId和workerId来做区分)

id 上添加 @TableId(type = IdType.ID_WORKER) 

package com.jia.pojo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor

public class User {
    // 对应数据库中的主键(uuid,自增id,雪花算法,redis,zookeeper)
    @TableId(type = IdType.ID_WORKER)
    private Long id;
    private String name;
    private int age;
    private String email;
}

数据库插入的唯一 id 默认值:ID_WORKER

主键自增 

1.实体类字段上的 @TableId(type = IdType.AUTO)

2.数据库字段一定要是自增

其他的源码解释

public enum IdType {
    AUTO(0),             // 数据库 id 自增
    NONE(1),             // 未设置主键
    INPUT(2),            // 手动输入
    ID_WORKER(3),        // 默认的全局 id
    UUID(4),             // 全局唯一 id  (uuid)
    ID_WORKER_STR(5);    // ID_WORKER 字符串表示法
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis-Plus的ID生成策略中,如果使用的是雪花算法(Snowflake),它是Twitter开源的一种分布式ID生成方案,要为了解决高并发下生成不重复的ID问题。在集群部署的情况下,可能会遇到ID重复的问题,因为每个节点都有自己的时间戳和序列号生成ID。 解决ID重复的方法通常包括: 1. **配置全局唯一ID**: MyBatis-Plus提供了一个全局唯一ID生成器`SnowflakeIdWorker`,它会根据节点ID和毫秒数生成一个64位的ID。确保所有节点都配置相同的集群ID和序列号,这样可以保证ID的一致性。 ```java // 雪花算法配置示例 GlobalConfig global = new GlobalConfig(); global.setIdGenerator(new SnowflakeIdWorker(0, 0)); // 集群ID和序列号 ConfigUtil.initGlobal(global); ``` 2. **数据库层面的唯一索引**: 对于自ID,可以在数据库表的字段上创建一个唯一索引,当插入操作发现该ID已经存在时,可以回滚事务或更新失败的记录。 3. **分布式锁**: 在高并发场景下,可能需要考虑使用分布式锁来确保同一时间只有一个节点生成新的ID,其他节点等待锁释放后才生成。 4. **分片策略**: 如果应用数据量非常大,可以考虑按照一定的规则对数据进行分片,每个分片使用独立的ID生成器,降低冲突概率。 相关问题: 1. 雪花算法是如何保证ID全局唯一的? 2. 在分布式环境中,如何配置MyBatis-Plus避免ID重复? 3. 分布式锁如何配合雪花算法MyBatis-Plus中使用?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值