當前位置:
首頁 > 最新 > MyBatis 配置 typeHandlers 詳解

MyBatis 配置 typeHandlers 詳解


0x00:前言參考

之前的《MyBatis 中 SqlMapConfig 配置文件詳解》記了一下 MyBatis 中的核心配置文件各個標籤的作用和使用場景,這篇文章細說一下配置文件中 typeHandlers 標籤的詳細使用。


0x01:標籤介紹

在 MyBatis 的 sql 映射配置文件中,為 sql 配置的輸入參數最終要從 java 類型轉換成資料庫能識別的類型,而從 sql 的查詢結果集中獲取的數據,也要從資料庫的數據類型轉換為對應的 Java 類型。

在 MyBatis 中,使用類型處理器(TypeHandler)將資料庫獲取的值以合適的方式轉換為 Java 類型,或者將 Java 類型的參數轉換為資料庫對應的類型。

在 MyBatis 中有許多自帶的類型處理器,但有時候也會滿足不了開發的需求,這時候就需要配置自己的類型處理器了,而 typeHandlers 標籤就是用來聲明自己的類型處理器的。


使用 typeHandlers 標籤配置一個自己的類型處理器,一般需要三個步驟:編寫類型處理器類,在 MyBatis 全局配置文件中配置該類型處理器,在 sql 映射配置文件中使用。

setParameter 方法是在 sql 配置傳入參數時(新增、刪除、修改、查詢)執行的操作,可以在將參數傳入資料庫之前在該方法中對數據類型做處理。

另外三個 getResult 方法則在資料庫返回結果時,將結果信息轉換為相應的 Java 類型。區別在於前兩個 getResult 方法供普通 select 方法使用,一個根據欄位名,一個根據欄位下標來獲取數據,最後一個 getResult 方法供存儲過程使用,根據欄位下標獲取數據。


以下代碼是編寫一個將 JDBC 的 timestamp 類型與 Date 類型相互轉換的類型處理器配置示例:

之後在 MyBatis 的全局配置文件 SqlMapConfig 中使用 typeHandlers 標籤來註冊類型處理器,示例代碼如下:

然後在 sql 映射文件 xxxMapper.xml 中的 sql 語句中添加自定義的類型處理器的處理配置即可,代碼示例如下:

如果設置了參數 regdate,就會將 Java 的 Date 類型轉換為資料庫需要的 timestamp 類型。另外,對於查詢結果,如果定義了 resultMap 來設置結果集對象的映射,同樣可以在標籤內指定 javaType,jdbcType 和 typeHandler 的名稱。

BaseTypeHandler 本身已經實現了 TypeHandler 介面,並繼承了 TypeReferance 抽象類,在它內部簡單的實現了 TypeHandler 介面中定義的四個方法的部分功能。

繼承 BaseTypeHandler 類之後,可以通過改寫 setNonNullParameter、getNullableResult 方法(三個)來實現類型處理器。示例代碼如下:

因為 BaseTypeHandler 繼承 TypeReferance 抽象類,所以它本身也是一個抽象類,類中的 4 個方法也為抽象方法。


MyBatis 中,其內部的類型處理器大部分都是繼承上面的 4 個方法來實現的,當其內部的類型處理器無法滿足開發需求時,就需要自己定義類型處理類,步驟為先編寫類型處理器類,其次將該處理器類配置到全局配置文件中,最後在 sql 映射配置文件中使用即可。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 發哥微課堂 的精彩文章:

TAG:發哥微課堂 |