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

MyBatis-Plus通用枚舉的實現(xiàn)示例

 更新時間:2025年12月12日 08:24:54   作者:期待のcode  
本文主要介紹 MyBatis-Plus 通用枚舉,及通過具體案例進行演示實現(xiàn)流程和原理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

MyBatis-Plus 通用枚舉是基于 MyBatis 的類型處理器 TypeHandler 擴展實現(xiàn)的標準化、通用化枚舉適配方案,核心定位是解決代碼層枚舉語義化與數(shù)據庫層編碼輕量化的映射問題。

它通過注解(@EnumValue)或接口(IEnum)約定枚舉值與數(shù)據庫存儲編碼的映射規(guī)則,結合枚舉包掃描機制,實現(xiàn)枚舉類型與數(shù)據庫字段編碼的無侵入式自動化雙向轉換,無需開發(fā)者編寫手動轉換邏輯,且一套規(guī)則可統(tǒng)一適配所有符合約定的枚舉類。

示例詳解

下面通過示例對MyBatis-Plus通用枚舉的執(zhí)行流程進行詳細介紹

數(shù)據庫表添加字段sex

創(chuàng)建通用枚舉類型
用 @EnumValue 標注數(shù)據庫存儲的枚舉編碼字段

@Getter
public enum SexEnum {
    MALE(1, "男"),
    FEMALE(2, "女");

    @EnumValue
    private Integer sex;      // 核心字段
    private String sexName;   // 業(yè)務描述字段

    SexEnum(Integer sex, String sexName) {
        this.sex = sex;
        this.sexName = sexName;
    }
}

MyBatis-Plus 通用枚舉類的核心構成要素如下:
首先需通過 @Getter 注解(或手動編寫)為所有私有字段提供 Getter 方法,滿足 MP 反射獲取字段值的基礎要求;其次必須定義由 @EnumValue 注解標注的數(shù)據庫映射核心字段,該字段是 MP 實現(xiàn)枚舉和數(shù)據庫編碼雙向轉換的唯一依據,寫庫時反射獲取其編碼值寫入數(shù)據庫,讀庫時依據編碼值反向匹配枚舉項;可寫業(yè)務描述字段(非 MP 強制要求,可提升枚舉的業(yè)務語義可讀性);此外需聲明具體枚舉項,每個枚舉項對應一組數(shù)據庫編碼值和業(yè)務描述值,枚舉項將抽象的業(yè)務狀態(tài)轉化為代碼中語義明確、可直接引用的實例;最后通過私有構造器完成核心字段與業(yè)務描述字段的初始化。

在 MyBatis-Plus 早期版本中,實現(xiàn)通用枚舉的主流方式是讓枚舉類實現(xiàn) IEnum 接口,且需指定接口泛型(泛型類型與數(shù)據庫編碼字段類型一致),并強制重寫 getValue() 方法,下面是具體代碼

@Getter
public enum SexEnum1 implements IEnum<Integer> {
    MALE(1, "男"),
    FEMALE(2, "女");

    private Integer sex;
    private String sexName;

    SexEnum1(Integer sex, String sexName) {
        this.sex = sex;
        this.sexName = sexName;
    }

    @Override
    public Integer getValue() {
        return this.sex;
    }
}

新版仍兼容該方式,若枚舉同時標注 @EnumValue 和實現(xiàn) IEnum 接口,@EnumValue 的優(yōu)先級更高

實體類

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {

    private Long id;
    private String name;
    private Integer age;
    private String email;
    // 枚舉
    private SexEnum sex;

}

實體類中的 sex 屬性無需定義為數(shù)據庫存儲的編碼類型,可直接聲明為自定義的通用枚舉類型,MyBatis-Plus 框架會自動完成枚舉類型與數(shù)據庫編碼之間的雙向轉換

type-enums-package 是 MyBatis-Plus 配置文件中用于指定通用枚舉類掃描包路徑的配置項。MP 啟動階段會掃描該路徑下所有符合通用枚舉規(guī)范的枚舉類,一方面自動識別枚舉類中基于@EnumValue / IEnum 定義的映射規(guī)則,另一方面為這些枚舉類自動綁定內置的 MybatisEnumTypeHandler 類型處理器,而 MybatisEnumTypeHandler 作為核心組件,支撐了通用枚舉與數(shù)據庫編碼之間的自動雙向轉換能力。

測試代碼

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testSexEnum(){
        User user = new User();
        user.setName("Enum");
        user.setAge(20);
        user.setEmail("test@enum.com");
        user.setSex(SexEnum.MALE);
        userMapper.insert(user);
        System.out.println(user.getSex());    // 獲取枚舉實例
        System.out.println(user.getSex().getSex()); // 獲取數(shù)據庫存儲的編碼值
        System.out.println(user.getSex().getSexName());  // 獲取業(yè)務描述
    }

執(zhí)行 user.setSex(SexEnum.MALE); MP 會通過 MybatisEnumTypeHandler 自動將枚舉項 SexEnum.MALE 轉換為其 @EnumValue 標注的編碼值 1 寫入數(shù)據庫。

user.getSex() 獲取 SexEnum.MALE 枚舉實例
user.getSex().getSex() 獲取數(shù)據庫存儲的編碼值
user.getSex().getSexName() 獲取業(yè)務描述

執(zhí)行結果如圖:

到此這篇關于MyBatis-Plus通用枚舉的實現(xiàn)示例的文章就介紹到這了,更多相關MyBatis-Plus通用枚舉內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Springmvc如何實現(xiàn)向前臺傳遞數(shù)據

    Springmvc如何實現(xiàn)向前臺傳遞數(shù)據

    這篇文章主要介紹了Springmvc如何實現(xiàn)向前臺傳遞數(shù)據,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • 深入淺出MappedByteBuffer(推薦)

    深入淺出MappedByteBuffer(推薦)

    MappedByteBuffer使用虛擬內存,因此分配(map)的內存大小不受JVM的-Xmx參數(shù)限制,但是也是有大小限制的,這篇文章主要介紹了MappedByteBuffer的基本知識,需要的朋友可以參考下
    2022-12-12
  • Mybatis-plus?sql注入及防止sql注入詳解

    Mybatis-plus?sql注入及防止sql注入詳解

    mybatis-plus提供了許多默認單表 CRUD 語句,對于其他SQL情況愛莫能助,下面這篇文章主要給大家介紹了關于Mybatis-plus?sql注入及防止sql注入的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-10-10
  • Java實現(xiàn)雙向鏈表(兩個版本)

    Java實現(xiàn)雙向鏈表(兩個版本)

    這篇文章主要介紹了Java實現(xiàn)雙向鏈表(兩個版本)的相關資料,需要的朋友可以參考下
    2016-02-02
  • Springboot 跨域配置無效及接口訪問報錯的解決方法

    Springboot 跨域配置無效及接口訪問報錯的解決方法

    這篇文章主要介紹了Springboot 跨域配置無效及接口訪問報錯的解決方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • 為什么Spring官方推薦的@Transational還能導致生產事故

    為什么Spring官方推薦的@Transational還能導致生產事故

    在Spring中進行事務管理非常簡單,只需要在方法上加上注解@Transactional,那么為什么Spring官方推薦的@Transational還能導致生產事故,本文就詳細的介紹一下
    2021-11-11
  • Java的Struts框架中<results>標簽的使用方法

    Java的Struts框架中<results>標簽的使用方法

    這篇文章主要介紹了Java的Struts框架中<results>標簽的使用方法,Struts框架是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2015-11-11
  • SpringBoot后端數(shù)據校驗實戰(zhàn)操作指南

    SpringBoot后端數(shù)據校驗實戰(zhàn)操作指南

    在項?開發(fā)中,對于前端提交的表單,后臺接?接收到表單數(shù)據后,為了保證程序的嚴謹性,通常后端會加?業(yè)務參數(shù)的合法校驗操作來避免程序的?技術性?bug,這篇文章主要給大家介紹了關于SpringBoot后端數(shù)據校驗的相關資料,需要的朋友可以參考下
    2022-07-07
  • Java遞歸和迭代區(qū)別詳細介紹

    Java遞歸和迭代區(qū)別詳細介紹

    這篇文章主要給大家介紹了關于Java中的迭代和遞歸有什么區(qū)別,文中介紹的非常詳細,感興趣的同學可以參考閱讀
    2023-04-04
  • Spring注解@Configuration與@Bean注冊組件的使用詳解

    Spring注解@Configuration與@Bean注冊組件的使用詳解

    這篇文章主要介紹了SpringBoot中的注解@Configuration與@Bean注冊組件的使用,具有很好的參考價值,希望對大家有所幫助
    2022-06-06

最新評論

广德县| 丰顺县| 汝阳县| 文山县| 杂多县| 永年县| 哈巴河县| 竹溪县| 高邮市| 菏泽市| 衡山县| 花垣县| 古田县| 郯城县| 五大连池市| 东方市| 临湘市| 阿拉善左旗| 乌兰浩特市| 沁水县| 太白县| 宁津县| 墨玉县| 剑阁县| 泰宁县| 华阴市| 绥滨县| 客服| 大荔县| 海门市| 雅安市| 铜山县| 大冶市| 托克逊县| 郎溪县| 普定县| 宝山区| 建始县| 砚山县| 和硕县| 财经|