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

mybatis-plus IdWorker生成的Id和返回給前臺的不一致的解決

 更新時間:2021年03月05日 10:31:49   作者:唯學(xué)習(xí)方能解憂  
這篇文章主要介紹了mybatis-plus IdWorker生成的Id和返回給前臺的不一致的解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

問題描述

今天在公司項目中修改id的生成策略為mybatis-plus自帶的IdWorker策略時,發(fā)現(xiàn)返回給前臺的id竟然和數(shù)據(jù)庫不一致。費解得很吶。

package net.mshome.twisted.tmall.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 數(shù)據(jù)庫實體類的父類,必需字段
 *
 * @author tangjizhouchn@foxmail.com
 * @date 2019/9/6
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class BaseEntity implements Serializable {

  private static final long serialVersionUID = 236424297319280526L;

  /**
   * 數(shù)據(jù)表主鍵,此處采用mybatis-plus自帶的IdType.ID_WORKER策略
   */
  @TableId(value = "id", type = IdType.ID_WORKER)
  protected Long id;

  /**
   * 數(shù)據(jù)創(chuàng)建時間
   */
  @TableField(fill = FieldFill.INSERT)
  protected LocalDateTime createTime;
  /**
   * 數(shù)據(jù)更新時間
   */
  @TableField(fill = FieldFill.INSERT_UPDATE)
  protected LocalDateTime updateTime;
}
  1. @TableId(value = "id", type = IdType.ID_WORKER)表示通過mybatis-plus自帶的優(yōu)化版本的SnowFlake算法生成主鍵。
  2. 關(guān)于主鍵生成方式,可以看看這個類 com.baomidou.mybatisplus.core.toolkit.IdWorker

問題原因

mybatis-plus的ID_WORKER策略會生成一個Long型的很長長長長的數(shù)字,這個數(shù)字傳到前臺之后,超過了js中數(shù)字的最大范圍,具體表現(xiàn)為最后兩位始終為 0。

解決辦法

很容易想到,超過了js數(shù)字最大范圍,那直接轉(zhuǎn)成String類型就完了。

方案一(適合BaseEntity方式)

package net.mshome.twisted.tmall.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 數(shù)據(jù)庫實體類的父類,必需字段
 *
 * @author tangjizhouchn@foxmail.com
 * @date 2019/9/6
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class BaseEntity implements Serializable {

  private static final long serialVersionUID = 236424297319280522L;

  /**
   * 數(shù)據(jù)表主鍵
   */
  @TableId(value = "id", type = IdType.ID_WORKER)
  @JsonSerialize(using = ToStringSerializer.class)
  protected Long id;

  /**
   * 數(shù)據(jù)創(chuàng)建時間
   */
  @TableField(fill = FieldFill.INSERT)
  protected LocalDateTime createTime;
  /**
   * 數(shù)據(jù)更新時間
   */
  @TableField(fill = FieldFill.INSERT_UPDATE)
  protected LocalDateTime updateTime;

}

添加 @JsonSerialize(using = ToStringSerializer.class)將結(jié)果轉(zhuǎn)換成String。

此方案適合有baseEntity的時候,避免每個entity都要單獨維護,很麻煩。

方案二(全局處理-兩種方式)

package net.mshome.twisted.tmall.configuration;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * 系統(tǒng)通用簡單配置
 *
 * @author tangjizhouchn@foxmail.com
 * @date 2019/10/16
 */
@Configuration
public class TmallConfiguration {

  /**
   * 方式一:此方式可以靈活配置任意類型的序列化反序列化
   */
  @Bean
  public Jackson2ObjectMapperBuilderCustomizer builderCustomizer() {
    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    DateTimeFormatter dateTimeSerializeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    DateTimeFormatter dateTimeDeserializeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
    return builder -> {
      // 所有Long類型轉(zhuǎn)換成String到前臺
      builder.serializerByType(Long.class, ToStringSerializer.instance);
      builder.serializerByType(LocalDate.class, new LocalDateSerializer(dateFormatter));
      builder.serializerByType(LocalDateTime.class, new LocalDateTimeSerializer(dateTimeSerializeFormatter));
      builder.deserializerByType(LocalDateTime.class, new LocalDateTimeDeserializer(dateTimeDeserializeFormatter));
    };
  }

  /**
   *
   * 方式二:采用objectMapper注入
   */
  @Bean
  public ObjectMapper objectMapper (Jackson2ObjectMapperBuilder builder) {
    ObjectMapper objectMapper = builder.createXmlMapper(false).build();
    SimpleModule simpleModule = new SimpleModule();
    // 直接將所有的Long類型轉(zhuǎn)換為String
    simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
    simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
    objectMapper.registerModule(simpleModule);
    return objectMapper;
  }
}

直接將所有的Long類型轉(zhuǎn)換為String給前臺展示。后臺用Long接收前臺傳入的數(shù)字String也可以的,Spring會自動給我們轉(zhuǎn)換。

到此這篇關(guān)于mybatis-plus IdWorker生成的Id和返回給前臺的不一致的解決的文章就介紹到這了,更多相關(guān)mybatis-plus IdWorker生成Id內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java實現(xiàn)一個簡單的Web服務(wù)器實例解析

    java實現(xiàn)一個簡單的Web服務(wù)器實例解析

    這篇文章主要介紹了java實現(xiàn)一個簡單的Web服務(wù)器實例解析,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • 詳解shiro緩存機制

    詳解shiro緩存機制

    Shiro提供了類似于Spring的Cache抽象,即Shiro本身不實現(xiàn)Cache,但是對Cache進行了又抽象,方便更換不同的底層Cache實現(xiàn)。下面通過實例代碼給大家分享shiro緩存機制,感興趣的朋友一起看看吧
    2017-09-09
  • spring Boot打包部署到遠程服務(wù)器的tomcat中

    spring Boot打包部署到遠程服務(wù)器的tomcat中

    這篇文章主要給大家介紹了關(guān)于spring Boot打包部署到遠程服務(wù)器的tomcat中的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • Spring JDBCTemplate原理及使用實例

    Spring JDBCTemplate原理及使用實例

    這篇文章主要介紹了Spring JDBCTemplate原理及使用實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • Spring?Boot應(yīng)用程序中如何使用Keycloak詳解

    Spring?Boot應(yīng)用程序中如何使用Keycloak詳解

    這篇文章主要為大家介紹了Spring?Boot應(yīng)用程序中如何使用Keycloak詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • 一文讀懂Spring Cloud-Hystrix

    一文讀懂Spring Cloud-Hystrix

    這篇文章主要介紹了通過一文讀懂Spring Cloud-Hystrix的相關(guān)知識,本文分步驟通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Spring中的三級緩存與循環(huán)依賴詳解

    Spring中的三級緩存與循環(huán)依賴詳解

    Spring三級緩存是Spring框架中用于解決循環(huán)依賴問題的一種機制,這篇文章主要介紹了Spring三級緩存與循環(huán)依賴的相關(guān)知識,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2024-05-05
  • Mybatis使用MySQL模糊查詢時輸入中文檢索不到結(jié)果怎么辦

    Mybatis使用MySQL模糊查詢時輸入中文檢索不到結(jié)果怎么辦

    這篇文章主要介紹了Mybatis使用MySQL模糊查詢時輸入中文檢索不到結(jié)果的解決辦法的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • spring?boot教程之建立第一個HelloWorld

    spring?boot教程之建立第一個HelloWorld

    這篇文章主要介紹了spring?boot教程之建立第一個HelloWorld的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • Java算法中的歸并排序算法代碼實現(xiàn)

    Java算法中的歸并排序算法代碼實現(xiàn)

    這篇文章主要介紹了Java算法中的歸并排序算法代碼實現(xiàn),歸并排序使用的是分治思想(Divide and Conquer),分治,顧名思義,就是分而治之,是將一個大問題分解成小的子問題來解決,需要的朋友可以參考下
    2023-12-12

最新評論

玛纳斯县| 雷州市| 柳州市| 东乌珠穆沁旗| 绥德县| 大竹县| 遂溪县| 女性| 渭源县| 万载县| 分宜县| 白河县| 穆棱市| 荥经县| 辽阳县| 十堰市| 永川市| 遂平县| 万年县| 老河口市| 疏勒县| 文化| 贵德县| 陈巴尔虎旗| 余姚市| 龙江县| 临城县| 平谷区| 宁晋县| 岑巩县| 韩城市| 西藏| 宜川县| 万山特区| 澜沧| 康马县| 泰顺县| 谢通门县| 上思县| 遵化市| 温州市|