MyBatis-Plus之通用枚舉

MyBatis-Plus之通用枚舉

前言

MyBatis-Plus中提供了通用枚舉,簡單來說就是將數據庫中的某一字段的代替的含義轉換成真實的含義將數據展示給用戶,用戶在存儲時也會將真實值轉換成代替的數字存入到數據庫中。舉個例子:用戶性別在數據庫中存儲為1(表示男)、2(表示女)。在讀取數據庫的數據時就會自動將1、2值轉換為男或女,返回給前端。

這樣做是可以有效地節省數據庫的存儲空間。下面我們來看看枚舉的使用方式~

MyBatis官方文檔講解的MyBatisPlus枚舉使用

官方文檔講MyBatisPlus的枚舉的地址:https://www.baomidou.com/pages/8390a4/#%E6%AD%A5%E9%AA%A41-%E5%A3%B0%E6%98%8E%E9%80%9A%E7%94%A8%E6%9E%9A%E4%B8%BE%E5%B1%9E%E6%80%A7

MyBatisPlus的通用枚舉解決了繁瑣的配置,可以做到讓 mybatis 優雅的使用枚舉屬性! 從MyBatisPlus的 3.5.2 版本開始只需完成 步驟1: 聲明通用枚舉屬性 即可使用。

步驟1: 聲明通用枚舉屬性

方式一: 使用 @EnumValue 注解枚舉屬性 完整示例(opens new window)

public enum GradeEnum {PRIMARY(1, "小學"),  SECONDORY(2, "中學"),  HIGH(3, "高中");GradeEnum(int code, String descp) {this.code = code;this.descp = descp;}@EnumValue//標記數據庫存的值是codeprivate final int code;//。。。
}

方式二: 枚舉屬性,實現 IEnum 接口如下:

public enum AgeEnum implements IEnum<Integer> {ONE(1, "一歲"),TWO(2, "二歲"),THREE(3, "三歲");private int value;private String desc;@Overridepublic Integer getValue() {return this.value;}
}

實體屬性使用枚舉類型(方式一和方式二都要做這一步的,age演示的是使用IEnum接口的枚舉處理,grade使用的是原生枚舉)

public class User {/*** 名字* 數據庫字段: name varchar(20)*/private String name;/*** 年齡,IEnum接口的枚舉處理* 數據庫字段:age INT(3)*/private AgeEnum age;/*** 年級,原生枚舉(帶{@link com.baomidou.mybatisplus.annotation.EnumValue}):* 數據庫字段:grade INT(2)*/private GradeEnum grade;
}

步驟2: 配置掃描通用枚舉

  • 注意!! 從 3.5.2 開始無需配置
  • 注意!! spring mvc 配置參考,安裝集成 MybatisSqlSessionFactoryBean 枚舉包掃描,spring boot 例子配置如下:

示例工程:

👉 mybatisplus-spring-boot(opens new window)

方式一:僅配置指定包內的枚舉類使用 MybatisEnumTypeHandler

配置文件 resources/application.yml

mybatis-plus:# 支持統配符 * 或者 ; 分割。這里寫的是使用了@EnumValue的枚舉的包名或者實現了IEnum接口的枚舉的包名typeEnumsPackage: com.baomidou.springboot.entity.enums....

當添加這個配置后,mybatis-plus 提供的 MybatisSqlSessionFactoryBean 會自動掃描包內合法的枚舉類(使用了 @EnumValue 注解,或者實現了 IEnum 接口),分別為這些類注冊使用 MybatisEnumTypeHandler

換句話說,只有指定包下的枚舉類會使用新的 TypeHandler。其他包下,或者包內沒有做相關改造的枚舉類,仍然會使用 mybatis 的 DefaultEnumTypeHandler。

方式二:直接指定 DefaultEnumTypeHandler

此方式用來 全局 修改 mybatis 使用的 EnumTypeHandler。

配置文件 resources/application.yml

mybatis-plus:# 修改 mybatis 的 DefaultEnumTypeHandlerconfiguration:default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler

自定義配置類 MybatisPlusAutoConfiguration

@Configuration
public class MybatisPlusAutoConfiguration {@Beanpublic MybatisPlusPropertiesCustomizer mybatisPlusPropertiesCustomizer() {return properties -> {GlobalConfig globalConfig = properties.getGlobalConfig();globalConfig.setBanner(false);MybatisConfiguration configuration = new MybatisConfiguration();configuration.setDefaultEnumTypeHandler(MybatisEnumTypeHandler.class);properties.setConfiguration(configuration);};}
}

如何序列化枚舉值為前端返回值?

可以使用Jackson、或者Fastjson都行。使用Jackson可以使用下面的重寫 toString 方法或者注解處理來達到告訴框架返回給前端的內容都行。使用Fastjson你就得重寫toString方法了,可以使用下面的全局處理方式或者局部處理方式來做都行。

Jackson

一、重寫 toString 方法
springboot
    @Beanpublic Jackson2ObjectMapperBuilderCustomizer customizer(){return builder -> builder.featuresToEnable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING);}
ackson
    ObjectMapper objectMapper = new ObjectMapper();objectMapper.configure(SerializationFeature.WRITE_ENUMS_USING_TO_STRING, true);

以上兩種方式任選其一,然后在枚舉中復寫 toString 方法,返回那個你要展示給前端的值,即可.

二、注解處理
public enum GradeEnum {PRIMARY(1, "小學"),  SECONDORY(2, "中學"),  HIGH(3, "高中");GradeEnum(int code, String descp) {this.code = code;this.descp = descp;}@EnumValue@JsonValue	//標記響應json值private final int code;
}

Fastjson

一、重寫 toString 方法
全局處理方式
    FastJsonConfig config = new FastJsonConfig();config.setSerializerFeatures(SerializerFeature.WriteEnumUsingToString);
局部處理方式
    @JSONField(serialzeFeatures= SerializerFeature.WriteEnumUsingToString)private UserStatus status;

以上兩種方式任選其一,然后在枚舉中復寫 toString 方法即可.

例子

1. 導MyBatisPlus的包

2. 定義枚舉類

image-20230714144245743

3. 掃描

image-20230714144529823

4. 在實體類里面使用枚舉

image-20230714144753627

具體例子:

1. 導包

image-20230714145921890

2. 定義枚舉類

image-20230714150104186

3. 掃描

image-20230714150501185

4. 在實體類里面使用枚舉

image-20230714150545154

5. 測試

我們先看看測試的環境哈!

image-20230714150638825

image-20230714150729937

image-20230714150830780

好了,來演示:

數據庫原來是這樣的:

image-20230714151023641

image-20230714150950970

image-20230714151005778

執行后,我們看到孫悟空加進來了,且status被成功變為了1,即實習對應的值。

image-20230714151106722

我們看看輸入,數字是不是可行。

image-20230714151225575

image-20230714151239632

image-20230714151251781

看到,一樣是可行的。且前端展示的時候,也是把我們要展示的字段展示出來了。

展示代碼如下:

image-20230714151343315

image-20230714151418019

優化前端展示:

image-20230714151536063

效果:

image-20230714151622961

image-20230714151651087

image-20230714151638647

上面的下拉就相當于是:你選擇哪個選項,然后就把那個選項對應的value值給作為那個status變量的值了,然后傳給后端,后端看到是1,存到數據庫里面就是1,展示給前端的時候,就顯示1對應的值,即“實習”

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/71418.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/71418.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/71418.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

鴻蒙應用中使用本地存儲實現數據共享

在鴻蒙應用開發中&#xff0c;使用本地存儲來保存和共享數據是一個常見的需求。通過本地存儲&#xff0c;我們可以在不同的頁面之間共享數據&#xff0c;避免重復加載數據&#xff0c;提高應用的性能和用戶體驗。本文將詳細介紹如何在鴻蒙應用中使用 AppStorage 實現數據的保存…

Comsol 二維Voronoi泰森多邊形結構振動傳輸特性

Voronoi 泰森多邊形結構在振動傳輸特性方面具有一些獨特的特點&#xff1a; 1. 頻率特性&#xff1a;Voronoi 泰森多邊形結構的頻率特性受到其幾何形狀和材料特性的影響。不規則的邊界和內部區域的形狀、尺寸和材料會影響結構的振動模態和頻率響應。 2. 波的傳播&#xff1a;…

解析DrugBank數據庫數據|Python

一、DrugBank 數據庫簡介 DrugBank 是一個綜合性的生物信息學和化學信息學數據庫&#xff0c;專門收錄藥物和靶點的詳細信息。它由加拿大阿爾伯塔大學的 Wishart 研究組 維護&#xff0c;提供化學、藥理學、相互作用、代謝、靶點等多方面的藥物數據。DrugBank 結合了實驗數據和…

YOLOv11-ultralytics-8.3.67部分代碼閱讀筆記-dataset.py

dataset.py ultralytics\data\dataset.py 目錄 dataset.py 1.所需的庫和模塊 2.class YOLODataset(BaseDataset): 3.class YOLOMultiModalDataset(YOLODataset): 4.class GroundingDataset(YOLODataset): 5.class YOLOConcatDataset(ConcatDataset): 6.class Sema…

LeetCode - 18 四數之和

題目來源 18. 四數之和 - 力扣&#xff08;LeetCode&#xff09; 題目描述 給你一個由 n 個整數組成的數組 nums &#xff0c;和一個目標值 target 。請你找出并返回滿足下述全部條件且不重復的四元組 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若兩個四元組元素一一…

pt100 2線和3線的區別?

3線比2線更穩定一些&#xff1b; 在電路中&#xff0c;b和c是不連接在一起的&#xff1b; 測試的時候&#xff0c;b和c是接在一起的&#xff0c;也就是說pt100中b和c是連接在一起的 3線比2線多一個反饋&#xff1b; 平時測試的時候&#xff0c;測試一下ab或者ac 都是一樣的…

使用QT讀取文件,生成json文件

前言&#xff1a; 最近我遇到了一個需要讀取本地文件生成json文件的問題&#xff0c;在這里分享下如何在qt中寫一個生成json的程序當然也可以使用一些可視化的工具來寫json文件(比如&#xff1a;notepad–,還有一些ide都可以)&#xff0c;但未免太過于麻煩本文會以一個以qmake…

國產編輯器EverEdit -告別東找西找!一鍵打開當前文件所在目錄!

1 文件操作 2 應用場景 在文件編輯過程中&#xff0c;有時需要對文件進行一些操作&#xff0c;比如&#xff1a;在命令窗口輸入文件路徑、文件名&#xff0c;進入到文件目錄&#xff0c;對文件進行壓縮等&#xff0c;如果沒有直達命令&#xff0c;用戶需要通過文件管理器找到目…

【Docker】百度網盤:基于VNC的Web訪問及后臺下載

本教程通過 Docker Compose 部署百度網盤的 VNC 版本&#xff0c;實現24小時不間斷下載、雙模式訪問、數據持久化、自動重啟和安全加密控制等核心功能。 目錄結構規劃 建議使用以下目錄結構&#xff08;可根據實際情況調整&#xff09;&#xff1a; ~/baidunetdisk/├── d…

立創實戰派ESP32-S3燒錄小智AI指南

小智 AI 聊天機器人-開源項目介紹 本項目是一個開源項目&#xff0c;主要用于教學目的。我們希望通過這個項目&#xff0c;能夠幫助更多人入門 AI 硬件開發&#xff0c;了解如何將當下飛速發展的大語言模型應用到實際的硬件設備中。無論你是對 AI 感興趣的學生&#xff0c;還是…

【設計模式】【創建型模式】原型模式(Prototype)

&#x1f44b;hi&#xff0c;我不是一名外包公司的員工&#xff0c;也不會偷吃茶水間的零食&#xff0c;我的夢想是能寫高端CRUD &#x1f525; 2025本人正在沉淀中… 博客更新速度 &#x1f44d; 歡迎點贊、收藏、關注&#xff0c;跟上我的更新節奏 &#x1f3b5; 當你的天空突…

Weblogic 反序列化漏洞深度剖析與復現

目錄 一、引言 二、Weblogic 反序列化漏洞原理 &#xff08;一&#xff09;什么是反序列化 &#xff08;二&#xff09;Weblogic 反序列化漏洞產生機制 三、Weblogic 反序列化漏洞危害 四、Weblogic 反序列化漏洞復現 &#xff08;一&#xff09;復現環境準備 &#xff…

2025年02月19日Github流行趨勢

項目名稱&#xff1a;OmniParser 項目地址url&#xff1a;https://github.com/microsoft/OmniParser 項目語言&#xff1a;Jupyter Notebook 歷史star數&#xff1a;12878 今日star數&#xff1a;2153 項目維護者&#xff1a;yadong-lu, ThomasDh-C, aliencaocao, nmstoker, kr…

深入解析 iOS 視頻錄制(三):完整錄制流程的實現與整合

深入解析 iOS 視頻錄制&#xff08;一&#xff09;&#xff1a;錄制管理核心MWRecordingController 類的設計與實現 深入解析iOS視頻錄制&#xff08;二&#xff09;&#xff1a;自定義UI的實現??????? 深入解析 iOS 視頻錄制&#xff08;三&#xff09;&#xff1a;完…

基于豆瓣2025電影數據可視化分析系統的設計與實現

??本項目旨在通過對豆瓣電影數據進行綜合分析與可視化展示&#xff0c;構建一個基于Python的大數據可視化系統。通過數據爬取收集、清洗、分析豆瓣電影數據&#xff0c;我們提供了一個全面的電影信息平臺&#xff0c;為用戶提供深入了解電影產業趨勢、影片評價與演員表現的工…

tcp協議連接,和傳輸數據

1、連接 這個是通用的 2、傳送數據 當連接建立后&#xff0c;客戶端和服務器都可以主動發送數據&#xff0c;分別如下 1》客戶端先發送數據 這里是單向的&#xff0c;服務器沒有對客戶端的數據內容進行應答&#xff0c;只是單純的對報文應答ack 2》服務器先發送數據

2024年國賽高教杯數學建模C題農作物的種植策略解題全過程文檔及程序

2024年國賽高教杯數學建模 C題 農作物的種植策略 原題再現 根據鄉村的實際情況&#xff0c;充分利用有限的耕地資源&#xff0c;因地制宜&#xff0c;發展有機種植產業&#xff0c;對鄉村經濟的可持續發展具有重要的現實意義。選擇適宜的農作物&#xff0c;優化種植策略&…

鴻蒙開發:V2版本裝飾器之@Monitor裝飾器

前言 本文代碼案例基于Api13。 隨著官方的迭代&#xff0c;在新的Api中&#xff0c;對于新的應用開發&#xff0c;官方已經建議直接使用V2所屬的裝飾器進行開發了&#xff0c;所以&#xff0c;能上手V2的盡量上手V2吧&#xff0c;畢竟&#xff0c;V2是V1的增強版本&#xff0c;…

國產編輯器EverEdit - 獨門暗器:自動監視剪貼板內容

1 監視剪貼板 1.1 應用場景 如果需要對剪貼板的所有歷史進行記錄&#xff0c;并進行分析和回顧&#xff0c;則可以使用監視剪貼板功能&#xff0c;不僅在EverEdit中的復制會記錄&#xff0c;在其他應用的復制也會記錄。 1.2 使用方法 新建一個空文檔(重要&#xff1a;防止擾亂…

pdf轉換成word在線 簡單好用 支持批量轉換 效率高 100%還原

pdf轉換成word在線 簡單好用 支持批量轉換 效率高 100%還原 在數字化辦公的浪潮中&#xff0c;文檔格式轉換常常讓人頭疼不已&#xff0c;尤其是 PDF 轉 Word 的需求極為常見。PDF 格式雖然方便閱讀和傳輸&#xff0c;但難以編輯&#xff0c;而 Word 格式卻能靈活地進行內容修…