亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Mybatis中自定義TypeHandler處理枚舉的示例代碼

 更新時(shí)間:2024年01月08日 10:39:33   作者:啊Q老師  
typeHandler,是 MyBatis 中的一個(gè)接口,用于處理數(shù)據(jù)庫中的特定數(shù)據(jù)類型,下面簡單介紹創(chuàng)建自定義 typeHandler 來處理枚舉類型的示例,感興趣的朋友跟隨小編一起看看吧

MyBatis

枚舉類型

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

簡單示例:
首先,創(chuàng)建枚舉類型 UserState

package cn.edu.MyBatisDemo.enums;
//使用枚舉將實(shí)體類 User 的 state 屬性設(shè)定為三種狀態(tài)
public enum UserState {
    //每個(gè)枚舉對象有四種值:索引值(從0開始)、名字(如 OnLine )、屬性1(如343)、屬性2(如在線)
    OnLine(343,"在線"),
    OffLine(8899,"離線"),
    BeBusy(1414,"忙碌");
    private int code; //定義括號(hào)中第一個(gè)屬性
    private String msg; //定義括號(hào)中第二個(gè)屬性
    private UserState(int code,String msg){
        this.code = code;
        this.msg = msg;
    }
    public int getCode() {
        return code;
    }
    public void setCode(int code) {
        this.code = code;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    //通過 code 值獲取對應(yīng)的枚舉對象
    public static UserState getUserStateByCode(int code){
        if(code == 343){
            return UserState.OnLine;
        } else if (code == 8899){
            return UserState.OffLine;
        } else {
            return UserState.BeBusy;
        }
    }
}

然后,創(chuàng)建獲取枚舉對象四種值的測試類 EnumTest

package cn.edu.MyBatisDemo.test;
import cn.edu.MyBatisDemo.enums.UserState;
import org.junit.Test;
public class EnumTest {
    @Test
    public void enumTest(){
        UserState userState = UserState.OnLine;
        //獲取枚舉對象的四種值
        System.out.println(userState.ordinal()); //索引值
        System.out.println(userState.name()); //名字
        System.out.println(userState.getCode()); //屬性1
        System.out.println(userState.getMsg()); //屬性2
    }
}

最后,測試結(jié)果,結(jié)果如圖:

typeHandler

typeHandler,是 MyBatis 中的一個(gè)接口,用于處理數(shù)據(jù)庫中的特定數(shù)據(jù)類型。MyBatis 默認(rèn)提供了兩個(gè)枚舉數(shù)據(jù)類型的 typeHandler — EnumTypeHandlerEnumOrdinalTypeHandler 。在 MyBatis 中,也可以通過自定義 typeHandler 來處理數(shù)據(jù)庫中的特定數(shù)據(jù)類型。另外,創(chuàng)建自定義的 typeHandler ,需要實(shí)現(xiàn) typeHandler 接口,并實(shí)現(xiàn)其中的幾個(gè)方法。下面簡單介紹創(chuàng)建自定義 typeHandler 來處理枚舉類型。

簡單示例:
首先,創(chuàng)建一個(gè)數(shù)據(jù)表 enum_user
表結(jié)構(gòu)信息如圖:

接著,通過 Generator 來根據(jù)數(shù)據(jù)庫表結(jié)構(gòu)自動(dòng)生成對應(yīng)的實(shí)體類、DAO 接口和 SQL 映射文件

然后,在自動(dòng)生成后,需要將實(shí)體類 state 屬性的類型修改為 UserState 類型,同時(shí)添加上 toString() 方法

另外,還需要將 SQL 映射文件中所有 state 指定的 jdbcType 部分去除

在創(chuàng)建自定義 typeHandler 前,先了解 typeHandler 默認(rèn)使用的是 EnumTypeHandler ,屬性 state 信息在數(shù)據(jù)庫中的值為四種值中的名字(BeBusy);而若指定使用 EnumOrdinalTypeHandler ,則屬性 state 信息在數(shù)據(jù)庫中的值為四種值中的索引值(2)

這些往往不是所需要的結(jié)果。所以,需要?jiǎng)?chuàng)建自定義 typeHandler 將屬性 state 信息在數(shù)據(jù)庫中的值設(shè)定為四種值中的屬性1(1414)。創(chuàng)建實(shí)現(xiàn) TypeHandler< T > 接口的類 CustomTypeHandler

package cn.edu.MyBatisDemo.enums;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class CustomTypeHandler implements TypeHandler<UserState> {
    @Override
    public void setParameter(PreparedStatement preparedStatement, int i, UserState userState, JdbcType jdbcType) throws SQLException {
        preparedStatement.setObject(i,userState.getCode());
    }
    @Override
    public UserState getResult(ResultSet resultSet, String s) throws SQLException {
        int code = resultSet.getInt(s);
        return UserState.getUserStateByCode(code);
    }
    @Override
    public UserState getResult(ResultSet resultSet, int i) throws SQLException {
        int code = resultSet.getInt(i);
        return UserState.getUserStateByCode(code);
    }
    @Override
    public UserState getResult(CallableStatement callableStatement, int i) throws SQLException {
        int code = callableStatement.getInt(i);
        return UserState.getUserStateByCode(code);
    }
}

隨之,在全局配置文件 mybatis.xml 中配置指定使用自定義的 typeHandler

<typeHandlers>
    <typeHandler handler="cn.edu.MyBatisDemo.enums.CustomTypeHandler" javaType="cn.edu.MyBatisDemo.enums.UserState" />
</typeHandlers>

最后,測試結(jié)果

結(jié)果如圖:

到此這篇關(guān)于Mybatis中自定義TypeHandler處理枚舉詳解的文章就介紹到這了,更多相關(guān)Mybatis自定義TypeHandler內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java MD5加密實(shí)現(xiàn)代碼

    java MD5加密實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了java MD5加密實(shí)現(xiàn)過程,為大家分享了MD5加密代碼,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Java零基礎(chǔ)教程之Windows下安裝 JDK的方法圖解

    Java零基礎(chǔ)教程之Windows下安裝 JDK的方法圖解

    這篇文章主要介紹了Java零基礎(chǔ)教程之Windows下安裝 JDK的方法圖解,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09
  • 關(guān)于ireport中傳入list的處理方式

    關(guān)于ireport中傳入list的處理方式

    這篇文章主要介紹了關(guān)于ireport中傳入list的處理方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Java?BitMap源碼仿寫實(shí)現(xiàn)

    Java?BitMap源碼仿寫實(shí)現(xiàn)

    這篇文章主要介紹了Java?BitMap源碼仿寫實(shí)現(xiàn),所謂bitmap,就是用每一位來存放某種狀態(tài),適用于大規(guī)模數(shù)據(jù),但數(shù)據(jù)狀態(tài)又不是很多的情況。通常是用來判斷某個(gè)數(shù)據(jù)存不存在的
    2022-12-12
  • Java之Pattern.compile函數(shù)用法詳解

    Java之Pattern.compile函數(shù)用法詳解

    這篇文章主要介紹了Java之Pattern.compile函數(shù)用法詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 淺談Java基準(zhǔn)性能測試之JMH

    淺談Java基準(zhǔn)性能測試之JMH

    JMH是Java Microbenchmark Harness的簡稱,一個(gè)針對Java做基準(zhǔn)測試的工具。想準(zhǔn)確的對一段代碼做基準(zhǔn)性能測試并不容易,因?yàn)镴VM層面在編譯期、運(yùn)行時(shí)對代碼做很多優(yōu)化,當(dāng)代碼塊處于整個(gè)系統(tǒng)中運(yùn)行時(shí)并不一定會(huì)生效,產(chǎn)生錯(cuò)誤的基準(zhǔn)測試結(jié)果,這個(gè)問題就是JMH要解決的
    2021-06-06
  • Javaweb使用cors完成跨域ajax數(shù)據(jù)交互

    Javaweb使用cors完成跨域ajax數(shù)據(jù)交互

    本文由跨域、cors的概念開始,進(jìn)而向大家介紹了Javaweb使用cors完成跨域ajax數(shù)據(jù)交互的相關(guān)內(nèi)容,需要的朋友可以了解下。
    2017-09-09
  • java封裝類型與基礎(chǔ)類型對比示例分析

    java封裝類型與基礎(chǔ)類型對比示例分析

    這篇文章主要為大家介紹了java封裝類型與基礎(chǔ)類型對比示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • 淺談JVM垃圾回收之哪些對象可以被回收

    淺談JVM垃圾回收之哪些對象可以被回收

    這篇文章主要介紹了JVM垃圾回收之哪些對象可以被回收,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 帶你快速搞定java并發(fā)庫

    帶你快速搞定java并發(fā)庫

    本文主要介紹了java高并發(fā)寫入用戶信息到數(shù)據(jù)庫的幾種方法,具有很好的參考價(jià)值。下面跟著小編一起來看下吧,希望能給你帶來幫助
    2021-07-07

最新評論