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

MyBatis實(shí)現(xiàn)數(shù)據(jù)庫(kù)類型和Java類型的轉(zhuǎn)換

 更新時(shí)間:2024年09月08日 14:17:37   作者:這孩子叫逆  
MyBatis 在處理數(shù)據(jù)庫(kù)查詢結(jié)果或傳遞參數(shù)時(shí),需要將數(shù)據(jù)庫(kù)類型與 Java 類型之間進(jìn)行轉(zhuǎn)換,本文就給大家介紹MyBatis如何實(shí)現(xiàn)數(shù)據(jù)庫(kù)類型和 Java 類型的轉(zhuǎn)換的,需要的朋友可以參考下

MyBatis 在處理數(shù)據(jù)庫(kù)查詢結(jié)果或傳遞參數(shù)時(shí),需要將數(shù)據(jù)庫(kù)類型與 Java 類型之間進(jìn)行轉(zhuǎn)換。MyBatis 提供了多種方式來(lái)實(shí)現(xiàn)這種類型轉(zhuǎn)換,主要通過(guò)內(nèi)置的 TypeHandler(類型處理器)機(jī)制。

1. TypeHandler 的作用

TypeHandler 是 MyBatis 中的一個(gè)接口,用于在 Java 類型和 JDBC 類型之間進(jìn)行轉(zhuǎn)換。每當(dāng) MyBatis 需要將 Java 對(duì)象傳遞給 SQL 語(yǔ)句,或者從 SQL 查詢結(jié)果中獲取數(shù)據(jù)并轉(zhuǎn)換為 Java 對(duì)象時(shí),都會(huì)使用 TypeHandler。

TypeHandler 負(fù)責(zé)以下兩種類型的轉(zhuǎn)換:

  • Java 類型到 JDBC 類型的轉(zhuǎn)換:當(dāng) MyBatis 需要將 Java 對(duì)象作為參數(shù)傳遞給 SQL 語(yǔ)句時(shí),TypeHandler 會(huì)將 Java 類型轉(zhuǎn)換為 JDBC 類型。

  • JDBC 類型到 Java 類型的轉(zhuǎn)換:當(dāng) MyBatis 從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)時(shí),TypeHandler 會(huì)將 JDBC 類型轉(zhuǎn)換為 Java 類型。

2. 內(nèi)置的 TypeHandler

MyBatis 提供了許多內(nèi)置的 TypeHandler,可以處理常見(jiàn)的 Java 類型和 JDBC 類型之間的轉(zhuǎn)換。以下是一些常見(jiàn)的內(nèi)置 TypeHandler

  • IntegerTypeHandler:用于將 int 和 Integer 轉(zhuǎn)換為數(shù)據(jù)庫(kù)中的 INTEGER 類型。

  • StringTypeHandler:用于將 String 轉(zhuǎn)換為數(shù)據(jù)庫(kù)中的 VARCHAR 類型。

  • DateTypeHandler:用于將 java.util.Date 轉(zhuǎn)換為數(shù)據(jù)庫(kù)中的 DATE 類型。

  • BooleanTypeHandler:用于將 boolean 和 Boolean 轉(zhuǎn)換為數(shù)據(jù)庫(kù)中的 BIT 或 BOOLEAN 類型。

這些內(nèi)置的 TypeHandler 在絕大多數(shù)情況下能夠滿足開(kāi)發(fā)者的需求。MyBatis 會(huì)自動(dòng)選擇合適的 TypeHandler 來(lái)處理常見(jiàn)的數(shù)據(jù)類型。

3. 自定義 TypeHandler

有時(shí),應(yīng)用程序中可能需要處理一些自定義的數(shù)據(jù)類型,或者需要對(duì)現(xiàn)有的類型轉(zhuǎn)換進(jìn)行定制。此時(shí)可以通過(guò)實(shí)現(xiàn) TypeHandler 接口來(lái)自定義類型處理器。

3.1. 實(shí)現(xiàn) TypeHandler 接口

要?jiǎng)?chuàng)建一個(gè)自定義的 TypeHandler,你需要實(shí)現(xiàn) org.apache.ibatis.type.TypeHandler 接口。這個(gè)接口有四個(gè)方法:

  • setParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType):將 Java 類型的數(shù)據(jù)設(shè)置到 PreparedStatement 中,作為 SQL 語(yǔ)句的參數(shù)。

  • getResult(ResultSet rs, String columnName):從 ResultSet 中通過(guò)列名獲取數(shù)據(jù),并將其轉(zhuǎn)換為 Java 類型。

  • getResult(ResultSet rs, int columnIndex):從 ResultSet 中通過(guò)列索引獲取數(shù)據(jù),并將其轉(zhuǎn)換為 Java 類型。

  • getResult(CallableStatement cs, int columnIndex):從 CallableStatement 中獲取數(shù)據(jù),并將其轉(zhuǎn)換為 Java 類型(用于處理存儲(chǔ)過(guò)程的輸出參數(shù))。

3.2. 自定義 TypeHandler 示例

假設(shè)你有一個(gè)枚舉類 Gender,它表示用戶的性別。數(shù)據(jù)庫(kù)中性別使用 CHAR 類型存儲(chǔ),值為 'M' 或 'F',而在 Java 中使用枚舉來(lái)表示:

public enum Gender {
    MALE, FEMALE
}

你可以創(chuàng)建一個(gè)自定義的 TypeHandler,用于將 CHAR 類型的數(shù)據(jù)庫(kù)值轉(zhuǎn)換為 Gender 枚舉,并反向轉(zhuǎn)換:

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import java.sql.*;
?
public class GenderTypeHandler extends BaseTypeHandler<Gender> {
?
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, Gender gender, JdbcType jdbcType) throws SQLException {
        ps.setString(i, gender == Gender.MALE ? "M" : "F");
    }
?
    @Override
    public Gender getNullableResult(ResultSet rs, String columnName) throws SQLException {
        String gender = rs.getString(columnName);
        return gender != null && gender.equals("M") ? Gender.MALE : Gender.FEMALE;
    }
?
    @Override
    public Gender getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        String gender = rs.getString(columnIndex);
        return gender != null && gender.equals("M") ? Gender.MALE : Gender.FEMALE;
    }
?
    @Override
    public Gender getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        String gender = cs.getString(columnIndex);
        return gender != null && gender.equals("M") ? Gender.MALE : Gender.FEMALE;
    }
}

3.3. 注冊(cè)自定義 TypeHandler

你可以通過(guò)兩種方式將自定義的 TypeHandler 注冊(cè)到 MyBatis:

在 MyBatis 配置文件中注冊(cè)

<typeHandlers>
    <typeHandler handler="com.example.GenderTypeHandler" javaType="com.example.Gender"/>
</typeHandlers>

通過(guò)注解注冊(cè)

如果你使用 MyBatis 的 Mapper 注解,可以在字段或方法上直接使用 @TypeHandler 注解:

@Select("SELECT id, name, gender FROM users WHERE id = #{id}")
@Results({
    @Result(property = "gender", column = "gender", typeHandler = GenderTypeHandler.class)
})
User selectUserById(int id);

4. 全局和局部 TypeHandler

  • 全局 TypeHandler:可以通過(guò)在 MyBatis 配置文件中注冊(cè)自定義 TypeHandler,或者使用 @MappedTypes 注解,將自定義 TypeHandler 綁定到特定的 Java 類型。MyBatis 會(huì)自動(dòng)在需要時(shí)使用這些全局 TypeHandler。

  • 局部 TypeHandler:在特定的 SQL 映射文件或注解中指定 TypeHandler。這種方式僅在指定的地方生效,不會(huì)影響全局行為。

5. 總結(jié)

  • 內(nèi)置 TypeHandler:MyBatis 提供了多種內(nèi)置的 TypeHandler,用于處理常見(jiàn)的 Java 類型和數(shù)據(jù)庫(kù)類型之間的轉(zhuǎn)換。
  • 自定義 TypeHandler:當(dāng)內(nèi)置的 TypeHandler 不能滿足需求時(shí),可以通過(guò)實(shí)現(xiàn) TypeHandler 接口或擴(kuò)展 BaseTypeHandler 類來(lái)自定義類型處理器,并在 MyBatis 中注冊(cè)使用。
  • 注冊(cè)與使用:自定義的 TypeHandler 可以全局注冊(cè),也可以在特定的映射文件或注解中局部使用,靈活處理復(fù)雜的類型轉(zhuǎn)換需求。

通過(guò)使用 TypeHandler,MyBatis 能夠靈活且高效地處理 Java 類型和數(shù)據(jù)庫(kù)類型之間的轉(zhuǎn)換,滿足各種應(yīng)用場(chǎng)景的需求。

以上就是MyBatis實(shí)現(xiàn)數(shù)據(jù)庫(kù)類型和Java類型的轉(zhuǎn)換的詳細(xì)內(nèi)容,更多關(guān)于MyBatis數(shù)據(jù)庫(kù)和Java類型轉(zhuǎn)換的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java優(yōu)化for循環(huán)嵌套的高效率方法

    Java優(yōu)化for循環(huán)嵌套的高效率方法

    這篇文章主要介紹了Java優(yōu)化for循環(huán)嵌套的高效率方法,幫助大家更好的提升java程序性能,感興趣的朋友可以了解下
    2020-09-09
  • mybatis中使用not?in與?in的寫法說(shuō)明

    mybatis中使用not?in與?in的寫法說(shuō)明

    這篇文章主要介紹了mybatis中使用not?in與?in的寫法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java如何利用Socket傳輸信息或文件

    Java如何利用Socket傳輸信息或文件

    這篇文章主要介紹了Java如何利用Socket傳輸信息或文件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Java項(xiàng)目如何引入日志生成器及其日志分級(jí)

    Java項(xiàng)目如何引入日志生成器及其日志分級(jí)

    這篇文章主要介紹了Java項(xiàng)目引入日志生成器及其日志分級(jí),本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • Java 自定義動(dòng)態(tài)數(shù)組方式

    Java 自定義動(dòng)態(tài)數(shù)組方式

    這篇文章主要介紹了Java自定義動(dòng)態(tài)數(shù)組方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • Java語(yǔ)言資源國(guó)際化步驟解析

    Java語(yǔ)言資源國(guó)際化步驟解析

    這篇文章主要介紹了Java語(yǔ)言資源國(guó)際化步驟解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Java數(shù)據(jù)結(jié)構(gòu)之稀疏矩陣定義與用法示例

    Java數(shù)據(jù)結(jié)構(gòu)之稀疏矩陣定義與用法示例

    這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)之稀疏矩陣定義與用法,結(jié)合實(shí)例形式分析了java稀疏矩陣的定義、運(yùn)算、轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • SpringBoot過(guò)濾器與攔截器深入分析實(shí)現(xiàn)方法

    SpringBoot過(guò)濾器與攔截器深入分析實(shí)現(xiàn)方法

    大家應(yīng)該都曉得實(shí)現(xiàn)過(guò)濾器需要實(shí)現(xiàn) javax.servlet.Filter 接口,而攔截器會(huì)在處理指定請(qǐng)求之前和之后進(jìn)行相關(guān)操作,配置攔截器需要兩步,本文通過(guò)實(shí)例代碼給大家介紹SpringBoot 過(guò)濾器和攔截器的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2022-11-11
  • type-aliases-package的用法解讀

    type-aliases-package的用法解讀

    在Mybatis的mapper.xml文件中使用type-aliases-package可以簡(jiǎn)化resultType和parameterType的全類名指定,通過(guò)配置掃描指定包中的實(shí)體類,讓Mybatis自動(dòng)識(shí)別這些實(shí)體
    2024-11-11
  • Java中LinkedHashSet的底層機(jī)制詳解

    Java中LinkedHashSet的底層機(jī)制詳解

    這篇文章主要介紹了Java中LinkedHashSet的底層機(jī)制解讀,   LinkedHashSet是具有可預(yù)知迭代順序的Set接口的哈希表和鏈接列表實(shí)現(xiàn),此實(shí)現(xiàn)與HashSet的不同之處在于,后者維護(hù)著一個(gè)運(yùn)行于所有條目的雙重鏈接列表,需要的朋友可以參考下
    2023-09-09

最新評(píng)論