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

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

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

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

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

示例詳解

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

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

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

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

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

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

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

在 MyBatis-Plus 早期版本中,實(shí)現(xiàn)通用枚舉的主流方式是讓枚舉類實(shí)現(xiàn) IEnum 接口,且需指定接口泛型(泛型類型與數(shù)據(jù)庫編碼字段類型一致),并強(qiáng)制重寫 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;
    }
}

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

實(shí)體類

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {

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

}

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

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

測試代碼

    @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());    // 獲取枚舉實(shí)例
        System.out.println(user.getSex().getSex()); // 獲取數(shù)據(jù)庫存儲的編碼值
        System.out.println(user.getSex().getSexName());  // 獲取業(yè)務(wù)描述
    }

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

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

執(zhí)行結(jié)果如圖:

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

相關(guān)文章

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

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

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

    深入淺出MappedByteBuffer(推薦)

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

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

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

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

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

    Springboot 跨域配置無效及接口訪問報(bào)錯的解決方法

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

    為什么Spring官方推薦的@Transational還能導(dǎo)致生產(chǎn)事故

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

    Java的Struts框架中<results>標(biāo)簽的使用方法

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

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

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

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

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

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

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

最新評論

长春市| 舞阳县| 当涂县| 建昌县| 横峰县| 大关县| 怀来县| 余江县| 广宁县| 威宁| 武宁县| 汕头市| 宾阳县| 嘉兴市| 六枝特区| 枣强县| 靖边县| 东兴市| 盐亭县| 灌阳县| 梧州市| 大田县| 扎兰屯市| 平原县| 淮安市| 通辽市| 玉树县| 盐山县| 大冶市| 安达市| 永康市| 色达县| 漳浦县| 陇川县| 沿河| 新源县| 乌兰县| 遵义市| 永清县| 鸡西市| 永胜县|