欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談MyBatisPlus注解@EnumValue避坑

 更新時(shí)間:2025年09月19日 10:44:30   作者:咖啡Beans  
本文介紹如何使用MyBatisPlus的注解@EnumValue聲明枚舉類,同時(shí)指出需要避開的幾個(gè)常見坑點(diǎn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

摘要

本文介紹如何使用MyBatisPlus的注解@EnumValue聲明枚舉類,同時(shí)指出需要避開的幾個(gè)常見坑點(diǎn)。

認(rèn)識(shí)注解

@EnumValue會(huì)自動(dòng)將數(shù)據(jù)庫中枚舉類型(如tinyint)字段映射成Java對象枚舉字段類型,同時(shí)也能將Java對象枚舉類型字段的值映射成數(shù)據(jù)庫中的枚舉類型字段值。

應(yīng)用場景

  • 通過枚舉統(tǒng)一管理單據(jù)狀態(tài),如訂單狀態(tài)(0: 待支付, 1: 已支付, 2: 已取消)  

注意事項(xiàng)

  • 枚舉字段的默認(rèn)值存在隱式分配:未顯式指定枚舉值時(shí),默認(rèn)從 0 開始遞增,可能與數(shù)據(jù)庫實(shí)際值沖突。 
  • 自定義映射邏輯缺失:未實(shí)現(xiàn) TypeHandler 或未覆蓋 getDescByCode() 方法,導(dǎo)致反向映射失敗。 
  • 字段類型匹配‌:@EnumValue標(biāo)記的枚舉類屬性的類型要和數(shù)據(jù)庫字段的類型對應(yīng)(如int對應(yīng)TINYINT),否則在查詢數(shù)據(jù)的時(shí)候無法轉(zhuǎn)化為枚舉類型,并顯示為null。

代碼示例

1)構(gòu)建數(shù)據(jù)表結(jié)構(gòu)[mysql] 

CREATE TABLE `task` (
  `id` BIGINT PRIMARY KEY AUTO_INCREMENT,
  `work_type` TINYINT NOT NULL,  -- 映射到 WorkType 枚舉
  `description` VARCHAR(255)
);

2)導(dǎo)入依賴  

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.29</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.8</version>
</dependency>

3)定義實(shí)體對象 

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;

@Data
@TableName("task")
public class Task {
    @TableId(type = IdType.AUTO)
    private Long id;

    // 數(shù)據(jù)庫字段為 TINYINT,映射到 WorkType 枚舉
    @EnumValue
    @TableField("work_type")
    private WorkType workType;

    @TableField("description")
    private String description;
}

4)定義枚舉類

import com.baomidou.mybatisplus.annotation.EnumValue;

//顯式指定數(shù)值
public enum WorkType {
    DEV(0, "開發(fā)"),  
    TEST(1, "測試"),
    IT(2, "運(yùn)維");

    @EnumValue
    private final int workCode; //數(shù)據(jù)庫字段類型為TINYINT
    private final String workDec;

    WorkType(int workCode, String workDec) {
        this.workCode = workCode;
        this.workDec = workDec;
    }

    public String getWorkDec() {
        return workDec;
    }

    //通過數(shù)值獲取文字描述
    public static WorkType getDescByCode(int value) {
        for (WorkType workType : WorkType.values()) {
            if (workType.workCode == value) {
                return workType;
            }
        }
        return null;
    }
}

5)使用MyBatisplus進(jìn)行增刪改查

import lombok.extern.slf4j.Slf4j;
import org.coffeebeans.enumvalue.Task;
import org.coffeebeans.enumvalue.TaskService;
import org.coffeebeans.enumvalue.WorkType;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

/**
 * <li>ClassName: org.org.coffeebeans.EnumValueTest </li>
 * <li>Author: OakWang </li>
 */
@Slf4j
@SpringBootTest
public class EnumValueTest {

    @Autowired
    private TaskService taskService;

    @Test
    void test1() {
       // 插入操作
       Task task = new Task();
       task.setWorkType(WorkType.IT);  // Java 枚舉 → 數(shù)據(jù)庫 TINYINT
       task.setDescription("運(yùn)維");
       taskService.save(task);
       /*
          執(zhí)行時(shí)間:8 ms,執(zhí)行SQL:INSERT INTO task  ( work_type, description )  VALUES (  2, '運(yùn)維'  )
        */
    }

    @Test
    void test2() {
       // 查詢操作
       Task result = taskService.getById(1L);
       System.out.println(result.getWorkType().getWorkDec());
       /*
          執(zhí)行時(shí)間:10 ms,執(zhí)行SQL:SELECT id,work_type AS workType,description FROM task WHERE id=1
          運(yùn)維
        */
    }

    @Test
    void test3() {
       // 查詢操作
       Task result = taskService.getById(1L);
       // 更新操作
       result.setWorkType(WorkType.DEV);
       task.setDescription("開發(fā)");
       taskService.updateById(result);
       /*
       執(zhí)行時(shí)間:10 ms,執(zhí)行SQL:SELECT id,work_type AS workType,description FROM task WHERE id=1
       執(zhí)行時(shí)間:5 ms,執(zhí)行SQL:UPDATE task  SET work_type=0, description='開發(fā)'  WHERE id=1
        */
    }
}

總結(jié)

以上我們了解了MyBatisPlus中的注解@EnumValue可以巧妙靈活地自動(dòng)映射對象字段和數(shù)據(jù)庫表字段,使用時(shí)需要顯式指定數(shù)值、匹配字段類型、合理自定義映射邏輯。

到此這篇關(guān)于淺談MyBatisPlus注解@EnumValue避坑的文章就介紹到這了,更多相關(guān)MyBatisPlus @EnumValue內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java自定義序列化的具體使用

    java自定義序列化的具體使用

    本文主要介紹了java自定義序列化的具體使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Java方法的參數(shù)傳遞機(jī)制實(shí)例詳解

    Java方法的參數(shù)傳遞機(jī)制實(shí)例詳解

    這篇文章主要介紹了Java方法的參數(shù)傳遞機(jī)制,結(jié)合實(shí)例形式詳細(xì)分析了java方法參數(shù)傳遞機(jī)制原理、實(shí)現(xiàn)方法及操作注意事項(xiàng),需要的朋友可以參考下
    2019-09-09
  • Java數(shù)組歸納總結(jié)

    Java數(shù)組歸納總結(jié)

    這篇文章主要介紹了Java數(shù)組歸納總結(jié),總結(jié)內(nèi)容有一維數(shù)組、二維數(shù)組、遍歷數(shù)組、替換元素、數(shù)組排序、數(shù)組拷貝、元素查詢、排序算法,下面來看看這些方法的相關(guān)資料,需要的小伙伴可以辛苦一下
    2022-01-01
  • 解決springboot中mongodb不啟動(dòng)及Dao不能被掃描到的問題

    解決springboot中mongodb不啟動(dòng)及Dao不能被掃描到的問題

    這篇文章主要介紹了解決springboot中mongodb不啟動(dòng)及Dao不能被掃描到的問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • arthas在idea和docker中的應(yīng)用方式

    arthas在idea和docker中的應(yīng)用方式

    這篇文章主要介紹了arthas在idea和docker中的應(yīng)用方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-10-10
  • IntelliJ IDEA 2020.2 配置大全詳細(xì)圖文教程(更新中)

    IntelliJ IDEA 2020.2 配置大全詳細(xì)圖文教程(更新中)

    這篇文章主要介紹了IntelliJ IDEA 2020.2 配置大全(更新中),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • spring的TransactionalEventListener事務(wù)感知源碼解析

    spring的TransactionalEventListener事務(wù)感知源碼解析

    這篇文章主要為大家介紹了spring的TransactionalEventListener事務(wù)感知源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Java實(shí)現(xiàn)EasyCaptcha圖形驗(yàn)證碼的具體使用

    Java實(shí)現(xiàn)EasyCaptcha圖形驗(yàn)證碼的具體使用

    Java圖形驗(yàn)證碼,支持gif、中文、算術(shù)等類型,可用于Java Web、JavaSE等項(xiàng)目,下面就跟隨小編一起來了解一下
    2021-08-08
  • java多線程Synchronized實(shí)現(xiàn)可見性原理解析

    java多線程Synchronized實(shí)現(xiàn)可見性原理解析

    這篇文章主要介紹了java多線程Synchronized實(shí)現(xiàn)可見性原理,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • Java8實(shí)戰(zhàn)之Stream的延遲計(jì)算

    Java8實(shí)戰(zhàn)之Stream的延遲計(jì)算

    JDK中Stream的中間函數(shù)如 filter(Predicate super T>)是惰性求值的,filter并非對流中所有元素調(diào)用傳遞給它的Predicate,下面這篇文章主要給大家介紹了關(guān)于Java8實(shí)戰(zhàn)之Stream延遲計(jì)算的相關(guān)資料,需要的朋友可以參考下
    2021-09-09

最新評論