SpringBoot集成ShardingJDBC系列【3】—— 雪花算法的选择(扩展)


文章只负责讲解sharding的相关配置,springboot其他的配置自己解决!!
文章内容将分开发布,便于平时查阅。


雪花算法的选择

上一章说过由于MyBatis-Plus和Sharding-JDBC各自都有一套雪花算法来生成ID,那么我们怎么知道它什么时候用的是谁的呢,又或者怎么选择用哪个。下面的解释都是作者自己多次调试得出来的结果,理解有误可以提出来分享。


(1) Mybatis-Plus对于主键ID为我们提供了如下图所示,以及AUTO(自增)、NONE(未设置主键类型)等等
在这里插入图片描述

  • 使用它:
    1. 方法一:将指定的数据表映射Entity类中@TableId注解的type属性删除或者改成ASSIGN_ID(且数据库主键不用设置为自增)
    2. 方法二:也可以采用全局配置在application.yml如下面的代码块,因为映射Entity类中的优先级高于全局配置。所以,个别需要配置其他或者自定义生成器的时候,在个别类中再配置。
## application.yml
mybatis-plus:
  mapper-locations: classpath*:mybatis/*.xml
  global-config:
    db-config:
      id-type: assign_id	# 就是这个,可以配置assign_id|assign_uuid|auto...

(2)Sharding-JDBC则提供缺省时表示使用默认自增列值生成器,也可使用自定义的列值生成器或选择内置类型:SNOWFLAKE | UUID。


调试看一看:

你可以试着自己DEBUG调试一下,首先找到DefaultIdentifierGenerator类下的nextId()方法(实现算法的其实这个Sequence类)和SnowflakeShardingKeyGenerator类下的generateKey()方法。之后你懂的~


遇过的坑(注意):
  • 主键采用雪花算法,则数据库表中的主键类型可根据需要设置为int 、bigint,int需要注意设置字段长度;主键字段不可自增。

  • 必须确保数据库表中该字段和分片算法该字段类型一致,例如:数据库中该字段类型为int(11),泛型所对应的分片类型应为Integer,如果需要配置为Long类型,请确保数据库中该字段类型为bigint。

  • 在雪花算法的选择上,Mybatis-plus优于Sharding-JDBC。


事先说明,该系列下的所有文章均为作者查阅很多配置资料后整理得出,主要用于个人记录学习的配置资料不涉及原理,仅作参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值