文章只负责讲解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。
- 使用它:在sharding的配置文件中配置,上篇文章已经有配过,但是注释掉了。可前往SpringBoot集成ShardingJDBC系列【2】—— 基于yaml基本配置。然后,需要将对应的数据表映射Entity类中的@TableId注解的type属性改为AUTO(只能改成这个,且数据库不用主键设置为自增)。
调试看一看:
你可以试着自己DEBUG调试一下,首先找到DefaultIdentifierGenerator类下的nextId()方法(实现算法的其实这个Sequence类)和SnowflakeShardingKeyGenerator类下的generateKey()方法。之后你懂的~
遇过的坑(注意):
-
主键采用雪花算法,则数据库表中的主键类型可根据需要设置为int 、bigint,int需要注意设置字段长度;主键字段不可自增。
-
必须确保数据库表中该字段和分片算法该字段类型一致,例如:数据库中该字段类型为int(11),泛型所对应的分片类型应为Integer,如果需要配置为Long类型,请确保数据库中该字段类型为bigint。
-
在雪花算法的选择上,Mybatis-plus优于Sharding-JDBC。
事先说明,该系列下的所有文章均为作者查阅很多配置资料后整理得出,主要用于个人记录学习的配置资料不涉及原理,仅作参考。