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

淺談MyBatisPlus注解@EnumValue避坑

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

摘要

本文介紹如何使用MyBatisPlus的注解@EnumValue聲明枚舉類,同時指出需要避開的幾個常見坑點。

認(rèn)識注解

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

應(yīng)用場景

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

注意事項

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

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, "運維");

    @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("運維");
       taskService.save(task);
       /*
          執(zhí)行時間:8 ms,執(zhí)行SQL:INSERT INTO task  ( work_type, description )  VALUES (  2, '運維'  )
        */
    }

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

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

總結(jié)

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

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

相關(guān)文章

  • Spring AOP方法內(nèi)部調(diào)用不生效的解決方案

    Spring AOP方法內(nèi)部調(diào)用不生效的解決方案

    最近有個需求,統(tǒng)計某個方法的調(diào)用次數(shù),開始使用 Spring AOP 實現(xiàn),后來發(fā)現(xiàn)當(dāng)方法被內(nèi)部調(diào)用時,切面邏輯將不會生效,所以本文就給大家介紹了Spring AOP方法內(nèi)部調(diào)用不生效的解決方案,需要的朋友可以參考下
    2025-01-01
  • Spring Bean基本管理實例詳解

    Spring Bean基本管理實例詳解

    這篇文章主要介紹了Spring Bean基本管理,以實例形式較為詳細(xì)的分析了Spring Bean的相關(guān)使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • 關(guān)于工廠方法模式的Java實現(xiàn)

    關(guān)于工廠方法模式的Java實現(xiàn)

    這篇文章主要介紹了關(guān)于工廠方法模式的Java實現(xiàn)講解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 帶你玩轉(zhuǎn)Kafka之初步使用

    帶你玩轉(zhuǎn)Kafka之初步使用

    最近開發(fā)的項目中,kafka用的比較多,為了方便梳理,所以記錄一些關(guān)于kafka的文章,這篇文章主要給大家介紹了關(guān)于Kafka初步使用的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • 基于IDEA的Maven工程創(chuàng)建方式

    基于IDEA的Maven工程創(chuàng)建方式

    文章介紹了Maven工程的GAVP屬性(GroupId、ArtifactId、Version、Packaging)及其格式規(guī)范,說明了Idea構(gòu)建JavaSE/JavaEE工程的方法,并概述了Maven標(biāo)準(zhǔn)項目結(jié)構(gòu)的作用與目錄劃分
    2025-07-07
  • springboot中redis操作Hash踩坑解決

    springboot中redis操作Hash踩坑解決

    本文主要介紹了springboot中redis操作Hash踩坑解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • Java如何實現(xiàn)對稱加密

    Java如何實現(xiàn)對稱加密

    這篇文章主要介紹了Java如何實現(xiàn)對稱加密問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • struts2實現(xiàn)文件上傳顯示進(jìn)度條效果

    struts2實現(xiàn)文件上傳顯示進(jìn)度條效果

    這篇文章主要為大家詳細(xì)介紹了struts2實現(xiàn)文件上傳顯示進(jìn)度條效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 整理很詳細(xì)的Java正則表達(dá)式使用大全

    整理很詳細(xì)的Java正則表達(dá)式使用大全

    這篇文章為大家整理了很詳細(xì)的Java正則表達(dá)式使用大全,大家在使用Java正則表達(dá)式的時候可查閱這篇文章,認(rèn)為不錯的朋友可以收藏起來
    2015-12-12
  • Java中的@interface注解使用詳解

    Java中的@interface注解使用詳解

    這篇文章主要介紹了Java中的@interface注解使用詳解,注解@interface不是接口是注解類,在jdk1.5之后加入的功能,使用@interface自定義注解時,自動繼承了java.lang.annotation.Annotation接口,需要的朋友可以參考下
    2023-12-12

最新評論

健康| 历史| 和平县| 芮城县| 互助| 三台县| 佛山市| 蛟河市| 通渭县| 达日县| 郎溪县| 垫江县| 怀宁县| 双柏县| 望都县| 湖口县| 内黄县| 崇阳县| 台北县| 青冈县| 河曲县| 鄂温| 孟村| 榕江县| 怀来县| 沙坪坝区| 九龙城区| 崇明县| 昌吉市| 庆安县| 浪卡子县| 忻城县| 宣汉县| 梨树县| 广东省| 苍山县| 东兰县| 尚志市| 天全县| 太保市| 惠来县|