最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

 @TableId(type=IdType.INPUT)

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

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

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

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

Long ID=IdWorker.getId(entity);

如果有更高的需求,還可以設(shè)置雪花算法的其他參數(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 {
?
? ? /**
? ? ?* 主機(jī)和進(jìn)程的機(jī)器碼
? ? ?*/
? ? 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 ? ? 工作機(jī)器 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);
? ? }
}

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

相關(guān)文章

  • Intellij IDEA安裝lombok插件及使用詳解

    Intellij IDEA安裝lombok插件及使用詳解

    今天小編就為大家分享一篇關(guān)于Intellij IDEA安裝lombok插件及使用詳解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Java自旋鎖的實(shí)現(xiàn)示例

    Java自旋鎖的實(shí)現(xiàn)示例

    自旋鎖是一種特殊的鎖,用于解決多線程同步問題,本文主要介紹了Java自旋鎖的實(shí)現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • Java中使用阻塞隊列控制線程集實(shí)例

    Java中使用阻塞隊列控制線程集實(shí)例

    這篇文章主要介紹了Java控制阻塞隊列線程集實(shí)例,本文用一個程序展示了如何使用阻塞隊列來控制線程集,程序功能是在一個目錄及它的所有子目錄下搜索所有文件,打印出包含指定關(guān)鍵字的文件列表,需要的朋友可以參考下
    2015-01-01
  • Spring Cloud Nacos配置管理方案

    Spring Cloud Nacos配置管理方案

    Nacos是SpringCloud中用于服務(wù)注冊與發(fā)現(xiàn)和配置管理的組件,提供多種健康檢查機(jī)制和歷史版本管理,Nacos支持單機(jī)、集群和多集群模式,通過OpenAPI和多種語言客戶端進(jìn)行接入,感興趣的朋友一起看看吧
    2025-01-01
  • Java編程中的HashSet和BitSet詳解

    Java編程中的HashSet和BitSet詳解

    這篇文章主要介紹了Java編程中的HashSet和BitSet詳解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • Java中compareTo方法使用小結(jié)

    Java中compareTo方法使用小結(jié)

    compareTo是Java中Object類中的一個方法,它的作用是比較兩個對象的大小關(guān)系,本文主要介紹了Java中compareTo方法使用小結(jié),感興趣的可以了解一下
    2024-01-01
  • java 爬蟲詳解及簡單實(shí)例

    java 爬蟲詳解及簡單實(shí)例

    這篇文章主要介紹了java 爬蟲詳解及簡單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Java后臺處理Json格式數(shù)據(jù)的方法

    Java后臺處理Json格式數(shù)據(jù)的方法

    這篇文章主要介紹了Java后臺處理Json格式數(shù)據(jù)的方法的相關(guān)資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • 老生常談反射之Class類的使用(必看篇)

    老生常談反射之Class類的使用(必看篇)

    下面小編就為大家?guī)б黄仙U劮瓷渲瓹lass類的使用(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Java多線程死鎖與資源限制操作

    Java多線程死鎖與資源限制操作

    這篇文章主要介紹了Java多線程死鎖與資源限制操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09

最新評論

宁蒗| 江华| 隆子县| 阿合奇县| 凤山市| 博客| 江西省| 色达县| 中卫市| 孝感市| 永仁县| 巴林右旗| 江都市| 武川县| 汉源县| 大宁县| 沛县| 滨州市| 苏尼特左旗| 荣昌县| 门头沟区| 措勤县| 泗水县| 博湖县| 房产| 昌吉市| 昔阳县| 准格尔旗| 堆龙德庆县| 临湘市| 盐津县| 柳林县| 义马市| 普洱| 舒城县| 扎鲁特旗| 蒲江县| 金门县| 茂名市| 许昌市| 英超|