MybatisPlus的优点
使用时注意事项:
首先需要在spring boot启动类中添加@MapperScan注解,扫描Mapper文件夹。
并且在POM文件引入坐标的时候不要同时引入Mybatis和Mybatis-Plus的坐标。容易出现版本差异不兼容。
日志配置
由于SQL的执行是不可见的,所以如果需要看SQL的执行,则需要进行日志配置。
配置方法:在配置文件的Confident 中对Log-impl 进行配置。
则可以通过Log进行SQL执行时结果的展示。
自定义ID生成器
在分布式系统中,通常需要唯一ID作为标识,所以我们需要全局唯一ID。
且生成的ID要具备4个特点
全局唯一性:不能出现重复的ID号,既然是唯一标识,这是最基本的要求。
趋势递增:在MySQL InnoDB引擎中使用的是聚集索引,由于多数RDBMS使用B-tree的数据结构来存储索引数据,在主键的选择上面我们应该尽量使用有序的主键保证写入性能。
单调递增:保证下一个ID一定大于上一个ID,例如事务版本号、IM增量消息、排序等特殊需求。
信息安全:如果ID是连续的,恶意用户的扒取工作就非常容易做了,直接按照顺序下载指定URL即可;如果是订单号就更危险了,竞对可以直接知道我们一天的单量。所以在一些应用场景下,会需要ID无规则、不规则。
所以我们通常采用UUID和SnowFlake的方法,且从3.3.0开始,默认采用雪花算法+UUID(不含下划线)
雪花算法
核心思想:
使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生4096个ID),最后还有一个符号位,永远是0,。
优点:
毫秒数在高位,自增序列在低位,整个ID都是趋势递增的。
不依赖数据库等第三方系统,以服务的方式部署,稳定性更高,生成ID的性能也是非常高的。
可以根据自身业务特性分配bit位,非常灵活。
缺点:
强依赖机器时钟,如果机器上时钟回拨,会导致发号重复或者服务会处于不可用状态。