先附上项目项目GitHub地址 spring-boot-mybatis-interceptor

有关Mybatis雪花ID主键插件前面写了两篇博客作为该项目落地的铺垫。

1、Mybatis框架---Mybatis插件原理

2、java算法---静态内部类实现雪花算法

该插件项目可以直接运用于实际开发中,作为分布式数据库表主键ID使用。

一、项目概述

1、项目背景

在生成表主键ID时,我们可以考虑主键自增 或者 UUID,但它们都有很明显的缺点

主键自增1、自增ID容易被爬虫遍历数据。2、分表分库会有ID冲突。

UUID1、太长,并且有索引碎片,索引多占用空间的问题 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了。

如图

 

二、项目代码说明

在正式环境中只要涉及到插入数据的操作都被该插件拦截,并发量会很大。所以该插件代码即要保证线程安全又要保证