文章只负责讲解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。
事先说明,该系列下的所有文章均为作者查阅很多配置资料后整理得出,主要用于个人记录学习的配置资料不涉及原理,仅作参考。
