亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Mybatis-plus如何提前獲取實體類用雪花算法生成的ID

 更新時間:2022年07月08日 10:36:34   作者:dongzhiyu  
本文主要介紹了Mybatis-plus如何提前獲取實體類用雪花算法生成的ID,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

Mybatis-plus中,通過設置@TableId可以讓Mybatis-plus自動為我們生成雪花算法的ID號,該ID號是一個長整型數(shù)據(jù),非常方便。但是雪花算法的ID號是在Insert執(zhí)行的時候生成的,我們在Insert執(zhí)行前是不知道Entity會獲得一個什么ID號。

但是在某些情況下,我們想提前獲取這個ID,這樣可以通過一些計算來生成其他字段的值。例如我們用此ID號做秘鑰來加密密碼。

這種情況下,需要提前生成ID號,手動設置給Entity。在實體類中,通過下面這個注解將自動ID改為有程序控制輸入:

 @TableId(type=IdType.INPUT)

那么我們需要用雪花算法生成一個ID號。是不是還需要另外自己寫一個雪花算法生成類呢?

完全不用。因為Mybatis-plus中內(nèi)置了雪花算法生成功能,我們找出來調(diào)用就行了,就是下面這個類:

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

我們可以這樣調(diào)用:

Long ID=IdWorker.getId(entity);

如果有更高的需求,還可以設置雪花算法的其他參數(shù)。

這個類源碼如下:

/*
?* Copyright (c) 2011-2020, baomidou (jobob@qq.com).
?* <p>
?* Licensed under the Apache License, Version 2.0 (the "License"); you may not
?* use this file except in compliance with the License. You may obtain a copy of
?* the License at
?* <p>
?* https://www.apache.org/licenses/LICENSE-2.0
?* <p>
?* Unless required by applicable law or agreed to in writing, software
?* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
?* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
?* License for the specific language governing permissions and limitations under
?* the License.
?*/
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 獲取器
?*
?* @author hubin
?* @since 2016-08-01
?*/
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();
? ? }
?
? ? /**
? ? ?* 有參構(gòu)造器
? ? ?*
? ? ?* @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獲取更優(yōu)的效果 去掉"-"
? ? ?*/
? ? public static String get32UUID() {
? ? ? ? ThreadLocalRandom random = ThreadLocalRandom.current();
? ? ? ? return new UUID(random.nextLong(), random.nextLong()).toString().replace(StringPool.DASH, StringPool.EMPTY);
? ? }
}

到此這篇關于Mybatis-plus如何提前獲取實體類用雪花算法生成的ID的文章就介紹到這了,更多相關Mybatis-plus獲取雪花算法生成ID內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • SpringBoot整合Spring?Data?JPA的詳細方法

    SpringBoot整合Spring?Data?JPA的詳細方法

    JPA全稱為Java Persistence API(Java持久層API),是一個基于ORM的標準規(guī)范,在這個規(guī)范中,JPA只定義標準規(guī)則,不提供實現(xiàn),本文重點給大家介紹SpringBoot整合Spring?Data?JPA的相關知識,感興趣的朋友一起看看吧
    2022-02-02
  • SpringBoot如何指定某些類優(yōu)先啟動

    SpringBoot如何指定某些類優(yōu)先啟動

    這篇文章主要介紹了SpringBoot如何指定某些類優(yōu)先啟動,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • Java線程狀態(tài)及切換、關閉線程的正確姿勢分享

    Java線程狀態(tài)及切換、關閉線程的正確姿勢分享

    這篇文章主要給大家介紹了關于Java線程狀態(tài)及切換、關閉線程的正確姿勢,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用Java具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-10-10
  • Java聊天室之使用Socket實現(xiàn)傳遞圖片

    Java聊天室之使用Socket實現(xiàn)傳遞圖片

    這篇文章主要為大家詳細介紹了Java簡易聊天室之使用Socket實現(xiàn)傳遞圖片功能,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以了解一下
    2022-10-10
  • java獲取linux服務器上的IP操作

    java獲取linux服務器上的IP操作

    這篇文章主要介紹了java獲取linux服務器上的IP操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • IDEA 開發(fā)多項目依賴的方法(圖文)

    IDEA 開發(fā)多項目依賴的方法(圖文)

    這篇文章主要介紹了IDEA 開發(fā)多項目依賴的方法(圖文),本文講一下關于使用IntelliJ IDEA基于Maven創(chuàng)建多模塊項目的實際開發(fā),非常具有實用價值,需要的朋友可以參考下
    2018-10-10
  • Java8中用foreach循環(huán)獲取對象的index下標詳解

    Java8中用foreach循環(huán)獲取對象的index下標詳解

    這篇文章主要給大家介紹了關于Java8中用foreach循環(huán)獲取對象的index下標的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • IntelliJ IDEA 詳細圖解最常用的配置(適合剛剛用的新人)

    IntelliJ IDEA 詳細圖解最常用的配置(適合剛剛用的新人)

    這篇文章主要介紹了IntelliJ IDEA 詳細圖解最常用的配置,本篇教程非常適合剛剛用的新人,本文圖文并茂給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • Java?static關鍵字詳細解析

    Java?static關鍵字詳細解析

    這篇文章主要介紹了Java?static關鍵字詳細解析,java中的static關鍵字主要用于內(nèi)存管理,可以用在變量、方法、代碼塊和嵌套類中。更多相關介紹,需要的小伙伴可以參考一下
    2022-08-08
  • Java并發(fā)工具Fork/Join原理

    Java并發(fā)工具Fork/Join原理

    這篇文章主要為大家介紹了Java并發(fā)工具Fork/Join原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06

最新評論