国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Mybatis自定義枚舉類處理器優(yōu)雅地使用枚舉

這篇具有很好參考價值的文章主要介紹了Mybatis自定義枚舉類處理器優(yōu)雅地使用枚舉。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

在和前端開發(fā)對接接口過程中經(jīng)常發(fā)現(xiàn)需要一些枚舉類的字典參數(shù),雖然可以通過swagger在線文檔給前端開發(fā),不過可以直接返回枚舉的編碼和字典值就可以更直觀,所以在項目里怎么實(shí)現(xiàn)?可以通過Mybatis的一些接口,自定義枚舉類的處理器實(shí)現(xiàn)

環(huán)境準(zhǔn)備

  • 開發(fā)環(huán)境

    • JDK 1.8
    • SpringBoot2.2.1
    • Maven 3.2+
  • 開發(fā)工具

    • IntelliJ IDEA
    • smartGit
    • Navicat15

定義一個接口

先定義一個IEnum接口,@JsonFormat格式為對象返回

package com.example.springboot.mybatis.common.enumhandler;
import com.fasterxml.jackson.annotation.JsonFormat;

@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public interface IEnum {
    String getCode();
    String getName();
}

枚舉工具類

寫一個枚舉工具類,根據(jù)code和name返回對應(yīng)枚舉類,根據(jù)反射獲取getEnumConstants,循環(huán)匹配

package com.example.springboot.mybatis.common.enumhandler;


public class EnumUtils {

    public static <T extends Enum<?> & IEnum> T codeOf(Class<T> enumCls , String code) {
        T[] enumConstants = enumCls.getEnumConstants();
        for (T t : enumConstants) {
            if (t.getCode().equals(code)) return t;
        }
        return null;
    }

    public static <T extends Enum<?> & IEnum> T nameOf(Class<T> enumCls , String name) {
        T[] enumConstants = enumCls.getEnumConstants();
        for (T t : enumConstants) {
            if (t.getName().equals(name)) return t;
        }
        return null;
    }

}

自定義類型轉(zhuǎn)換器

自定義Mybatis的類型轉(zhuǎn)換器類,繼承BaseTypeHandler,里面有幾個需要實(shí)現(xiàn)的方法

  • void setNonNullParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType)
    用于定義設(shè)置參數(shù)時把Java類型的參數(shù)轉(zhuǎn)換為對應(yīng)的數(shù)據(jù)庫類型

  • T getNullableResult(ResultSet rs, String columnName)
    用于定義通過字段名稱獲取字段數(shù)據(jù)時把數(shù)據(jù)庫類型轉(zhuǎn)換為對應(yīng)的Java類型

  • T getNullableResult(ResultSet rs, int columnIndex)
    用于定義通過字段索引獲取字段數(shù)據(jù)時把數(shù)據(jù)庫類型轉(zhuǎn)換為對應(yīng)的Java類型

  • T getNullableResult(CallableStatement cs, int columnIndex)
    用定義調(diào)用存儲過程把數(shù)據(jù)庫類型轉(zhuǎn)換為對應(yīng)的Java類型

package com.example.springboot.mybatis.common.enumhandler;


import cn.hutool.core.lang.Assert;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class MybatisEnumCodeTypeHandler<E extends Enum<E> & IEnum> extends BaseTypeHandler<E>{

    private final Class<E> type;

    public MybatisEnumCodeTypeHandler(Class<E> type) {
        Assert.notNull(type , "type argument can not be null");
        this.type = type;
    }

    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, E e, JdbcType jdbcType) throws SQLException {
        preparedStatement.setString(i , e.getCode());
    }

    @Override
    public E getNullableResult(ResultSet resultSet, String s) throws SQLException {
        String code = resultSet.getString(s);
        return resultSet.wasNull() ? null : EnumUtils.codeOf(this.type , code);
    }

    @Override
    public E getNullableResult(ResultSet resultSet, int i) throws SQLException {
        String code = resultSet.getString(i);
        return resultSet.wasNull() ? null : EnumUtils.codeOf(this.type , code);
    }

    @Override
    public E getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        String code = callableStatement.getString(i);
        return callableStatement.wasNull() ? null : EnumUtils.codeOf(this.type , code);
    }
}

yaml配置類型處理器

application.yml里配置default-enum-type-handler,加上自定義的MybatisEnumCodeTypeHandler

mybatis:
    # 指定sql映射文件位置
    mapper-locations: classpath:mybatis/mapper/*.xml
    configuration:
      default-enum-type-handler: com.example.springboot.mybatis.common.enumhandler.MybatisEnumCodeTypeHandler
      map-underscore-to-camel-case: true

項目中使用

需要的枚舉類就繼承IEnum接口

package com.example.springboot.mybatis.bean;


import com.example.springboot.mybatis.common.enumhandler.IEnum;

public enum  Sex implements IEnum {

    MAN("1","男"),
    WOMAN("2","女");

    private String code;
    private String name;

    Sex(String code, String name) {
        this.code = code;
        this.name = name;
    }


    @Override
    public String getCode() {
        return code;
    }

    @Override
    public String getName() {
        return name;
    }
}

寫個接口,參數(shù)返回json:文章來源地址http://www.zghlxwxcb.cn/news/detail-439468.html

{"userId":"1","username":"admin","sex":{"code":"1","name":"男"},"password":"11"}

到了這里,關(guān)于Mybatis自定義枚舉類處理器優(yōu)雅地使用枚舉的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Spring Boot 如何自定義異常處理器

    Spring Boot 如何自定義異常處理器

    在Spring Boot應(yīng)用程序中,異常處理是一個非常重要的方面。如果您不處理異常,應(yīng)用程序可能會崩潰或出現(xiàn)不可預(yù)料的行為。默認(rèn)情況下,Spring Boot將未捕獲的異常返回給客戶端。這通常不是期望的行為,因?yàn)榭蛻舳丝赡軣o法理解異常信息。在本文中,我們將介紹如何在Sprin

    2024年02月06日
    瀏覽(21)
  • Springboot +spring security,自定義認(rèn)證和授權(quán)異常處理器

    在Spring Security中異常分為兩種: AuthenticationException 認(rèn)證異常 AccessDeniedException 權(quán)限異常 我們先給大家演示下如何自定義異常處理器,然后再結(jié)合源碼幫助大家進(jìn)行分析 如何創(chuàng)建一個SpringSecurity項目,前面文章已經(jīng)有說明了,這里就不重復(fù)寫了。 3.1配置SecurityConfig 這里主要是

    2024年02月07日
    瀏覽(19)
  • 自定義ZYNQ的PL端數(shù)據(jù)處理器,通過DMA等進(jìn)行交互(附GitHub源碼)

    自定義ZYNQ的PL端數(shù)據(jù)處理器,通過DMA等進(jìn)行交互(附GitHub源碼)

    摘要:在ZYNQ中設(shè)計了自定義的PL端數(shù)據(jù)處理器,通過DMA連接到AXI總線,完成了PS和該P(yáng)L端的數(shù)據(jù)交互等功能。 開發(fā)板型號:Zynq-7000 SoC XC7Z305 FPGA 開發(fā)平臺:Vivado 2019.1; Vivado SDK 2019.1 Github源碼 :https://github.com/CY0807/Vivado_FIFO_Test.git (1)vivado_project存放了vivado和sdk原始工程文件

    2024年01月21日
    瀏覽(22)
  • 編譯時注解處理器的一次使用經(jīng)歷

    編譯時注解處理器的一次使用經(jīng)歷

    編譯時注解處理器在《深入理解Java虛擬機(jī)》一書中有一些介紹(前端編譯篇有提到),但一直沒有機(jī)會使用,直到碰到這個需求,覺得再合適不過了,就簡單用了一下,這里做個記錄。------原文寫于2021年2月8日。 我們?yōu)楣咎峁┝艘惶淄ㄓ玫腏AVA組件包,組件包內(nèi)有不同的模

    2024年02月12日
    瀏覽(24)
  • SpringBoot | RestTemplate異常處理器ErrorHandler使用詳解

    SpringBoot | RestTemplate異常處理器ErrorHandler使用詳解

    關(guān)注wx:CodingTechWork ??在代碼開發(fā)過程中,發(fā)現(xiàn)很多地方通過 RestTemplate 調(diào)用了第三方接口,而第三方接口需要根據(jù)某些狀態(tài)碼或者異常進(jìn)行重試調(diào)用,此時,要么在每個調(diào)用的地方進(jìn)行異常捕獲,然后重試;要么在封裝的 RestTemplate 工具類中進(jìn)行統(tǒng)一異常捕獲和封裝。當(dāng)然

    2024年02月12日
    瀏覽(18)
  • jmeter-BeanShell預(yù)處理器與BeanShell后置處理器的使用

    jmeter-BeanShell預(yù)處理器與BeanShell后置處理器的使用

    BeanShell是一個小型嵌入式Java源代碼解釋器,具有對象腳本語言特性,能夠動態(tài)地執(zhí)行標(biāo)準(zhǔn)JAVA語法,并利用在JavaScript和Perl中常見的松散類型、命令、閉包等通用腳本來對其進(jìn)行拓展。 前置處理器:請求發(fā)送之前對請求參數(shù)做一些處理 后置處理器:請求發(fā)送完成之后對響應(yīng)數(shù)

    2023年04月17日
    瀏覽(28)
  • MyBatis:自定義 typeHandler 處理枚舉類型

    MyBatis:自定義 typeHandler 處理枚舉類型

    枚舉類型 ,在 Java 中屬于基本數(shù)據(jù)類型,而不是構(gòu)造數(shù)據(jù)類型,用于聲明一組命名的常數(shù)。枚舉可以根據(jù) Integer 、Long 、Short 或 Byte 中的任意一種數(shù)據(jù)類型來創(chuàng)建一種新型變量。這種變量可以設(shè)置為已經(jīng)定義的一組之中的一個,有效防止用戶提供無效值,使代碼更加清晰。

    2024年02月02日
    瀏覽(20)
  • ARM處理器架構(gòu)的Thumb指令集中關(guān)于IT指令的使用

    在ARMv6T2以及ARMv7架構(gòu)擴(kuò)展了Thumb指令集,其中加入了 IT 指令,進(jìn)一步增強(qiáng)了代碼的緊湊性。 Thumb中有一個比較有意思的指令—— IT ,這條指令用于根據(jù)指定的條件來執(zhí)行后面相繼的四條指令。當(dāng)然,Thumb-2中大部分算術(shù)邏輯指令都含有帶條件執(zhí)行的特征,不過Thumb-2是32位的。

    2024年02月07日
    瀏覽(26)
  • 虛擬機(jī)內(nèi)存、處理器、內(nèi)存、快照的修改方法(虛擬機(jī)VMware使用技巧 上 )

    虛擬機(jī)內(nèi)存、處理器、內(nèi)存、快照的修改方法(虛擬機(jī)VMware使用技巧 上 )

    1、基礎(chǔ)設(shè)置 ①、內(nèi)存 VMware有兩項基礎(chǔ)的設(shè)置 內(nèi)存 和 處理器 。先說內(nèi)存設(shè)置,主要是設(shè)置內(nèi)存的大小。安裝虛擬軟件的主機(jī)內(nèi)存最好不低于16G,最好32G。主機(jī)內(nèi)存太小不適合運(yùn)行虛擬機(jī)軟件。 16G的內(nèi)存可以主機(jī)和虛擬機(jī)對半分,主機(jī)留8G,虛擬機(jī)分8G。32G的內(nèi)存可以按照主

    2024年02月09日
    瀏覽(20)
  • Jmeter前置處理器和后置處理器

    Jmeter前置處理器和后置處理器

    1. 后置處理器(Post Processor) 本質(zhì)上是?種對sampler發(fā)出請求后接受到的響應(yīng)數(shù)據(jù)進(jìn)?處理 (后處理)的?法 ?正則表達(dá)式后置處理器 (1)引?名稱:下?個請求要引?的參數(shù)名稱,如填寫title,則可?${title}引?它 (2)正則表達(dá)式: ():括起來的部分就是要提取的。 .:匹配

    2023年04月21日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包