Mybatis框架(9)---Mybatis自定义插件生成雪花ID做为表主键项目
先附上项目项目GitHub地址
spring-boot-mybatis-interceptor
有关Mybatis雪花ID主键插件前面写了两篇博客作为该项目落地的铺垫。
该插件项目可以直接运用于实际开发中,作为分布式数据库表主键ID使用。
一、项目概述
1、项目背景
在生成表主键ID时,我们可以考虑主键自增 或者 UUID,但它们都有很明显的缺点
主键自增
:1、自增ID容易被爬虫遍历数据。2、分表分库会有ID冲突。
UUID
: 1、太长,并且有索引碎片,索引多占用空间的问题 2、无序。
雪花算法就很适合在分布式场景下生成唯一ID,它既可以保证唯一又可以排序,该插件项目的原理是
通过拦截器拦截Mybatis的insert语句,通过自定义注解获取到主键,并为该主键赋值雪花ID,插入数据库中。
2、技术架构
项目总体技术选型
SpringBoot2.1.7 + Mybatis + Maven3.5.4 + Mysql + lombok(插件)
3、使用方式
在你需要做为主键的属性上添加@AutoId
注解,那么通过插件可以自动为该属性赋值主键ID。
public class TabUser { /** * id(添加自定义注解) */ @AutoId private Long id; /** * 姓名 */ private String name; //其它属性 包括get,set方法 }
4、项目测试
配置好数据库连接信息,直接启动Springboot启动类Application.java
,访问localhost:8080/save-foreach-user
就可以看到数据库数据已经有雪花ID了。
如图
二、项目代码说明
在正式环境中只要涉及到插入数据
的操作都被该插件拦截,并发量会很大。所以该插件代码即要保证线程安全
又要保证