在Mybatis-plus中,通过设置@TableId可以让Mybatis-plus自动为我们生成雪花算法的ID号,该ID号是一个长整型数据,非常方便。但是雪花算法的ID号是在Insert执行的时候生成的,我们在Insert执行前是不知道Entity会获得一个什么ID号。

但是在某些情况下,我们想提前获取这个ID,这样可以通过一些计算来生成其他字段的值。

那么我们需要用雪花算法生成一个ID号。是不是还需要另外自己写一个雪花算法生成类呢?

完全不用。因为Mybatis-plus中内置了雪花算法生成功能,我们找出来调用就行了,就是下面这个类:

import com.baomidou.mybatisplus.core.toolkit.IdWorker;

我们可以这样调用:

Long ID=IdWorker.getId(entity);

如果有更高的需求,还可以设置雪花算法的其他参数。

这个类源码如下:
package com.baomidou.mybatisplus.core.toolkit;   import
com.baomidou.mybatisplus.core.config.GlobalConfig; import
com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator; import
com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;   import
java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import
java.util.UUID; import java.util.concurrent.ThreadLocalRandom;   /**  * id 获取器
 *  */ public class IdWorker {       /**      * 主机和进程的机器码      */     private
static IdentifierGenerator IDENTIFIER_GENERATOR = new
DefaultIdentifierGenerator();       /**      * 毫秒格式化时间      */     public
static final DateTimeFormatter MILLISECOND =
DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS");       /**      * 获取唯一ID    
 *      * @return id      */     public static long getId() {         return
getId(new Object());     }       /**      * 获取唯一ID      *      * @return id    
 */     public static long getId(Object entity) {         return
IDENTIFIER_GENERATOR.nextId(entity).longValue();     }       /**      * 获取唯一ID
     *      * @return id      */     public static String getIdStr() {        
return getIdStr(new Object());     }       /**      * 获取唯一ID      *      *
@return id      */     public static String getIdStr(Object entity) {        
return IDENTIFIER_GENERATOR.nextId(entity).toString();     }       /**      *
格式化的毫秒时间      */     public static String getMillisecond() {         return
LocalDateTime.now().format(MILLISECOND);     }       /**      * 时间 ID = Time +
ID      * <p>例如:可用于商品订单 ID</p>      */     public static String getTimeId() {  
      return getMillisecond() + getIdStr();     }       /**      * 有参构造器      *
     * @param workerId     工作机器 ID      * @param dataCenterId 序列号      * @see
#setIdentifierGenerator(IdentifierGenerator)      */     public static void
initSequence(long workerId, long dataCenterId) {         IDENTIFIER_GENERATOR =
new DefaultIdentifierGenerator(workerId, dataCenterId);     }       /**      *
自定义id 生成方式      *      * @param identifierGenerator id 生成器      * @see
GlobalConfig#setIdentifierGenerator(IdentifierGenerator)      */     public
static void setIdentifierGenerator(IdentifierGenerator identifierGenerator) {  
      IDENTIFIER_GENERATOR = identifierGenerator;     }       /**      *
使用ThreadLocalRandom获取UUID获取更优的效果 去掉"-"      */     public static String
get32UUID() {         ThreadLocalRandom random = ThreadLocalRandom.current();  
      return new UUID(random.nextLong(),
random.nextLong()).toString().replace(StringPool.DASH, StringPool.EMPTY);     }
}

技术
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:766591547
关注微信