欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatis中的自定義TypeHandler詳解

 更新時間:2023年07月14日 11:13:50   作者:吳聲子夜歌  
這篇文章主要介紹了MyBatis中的自定義TypeHandler詳解,定義的?typeHandler?泛型為?String,顯然我們要把數(shù)據(jù)庫的數(shù)據(jù)類型轉(zhuǎn)化為?String?型,然后實現(xiàn)設(shè)置參數(shù)和獲取結(jié)果集的方法,需要的朋友可以參考下

要實現(xiàn) typeHandler 就需要去實現(xiàn)接口 typeHandler,或者繼承 BaseTypeHandler(實際上,BaseTypeHandler 實現(xiàn)了 typeHandler 接口)。

自定義String類型的TypeHandler:

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.ResultSet;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;
import org.apache.log4j.Logger;
public class MyTypeHandler implements TypeHandler<String> {
    Logger logger = Logger.getLogger(MyTypeHandler.class);
    @Override
    public void setParameter(PreparedStatement ps, int i, String parameter,
            JdbcType jdbcType) throws SQLException {
        logger.info("設(shè)置 string 參數(shù)【" + parameter + "】");
        ps.setString(i, parameter);
    }
    @Override
    public String getResult(ResultSet rs, String columnName)
            throws SQLException {
        String result = rs.getString(columnName);
        logger.info("讀取 string 參數(shù) 1 【" + result + "】");
        return result;
    }
    @Override
    public String getResult(ResultSet rs, int columnIndex) throws SQLException {
        String result = rs.getString(columnIndex);
        logger.info("讀取string 參數(shù) 2【" + result + "】");
        return result;
    }
    @Override
    public String getResult(CallableStatement cs, int columnIndex)
            throws SQLException {
        String result = cs.getString(columnIndex);
        logger.info("讀取 string 參數(shù) 3 【" + result + "】");
        return result;
    }
}

定義的 typeHandler 泛型為 String,顯然我們要把數(shù)據(jù)庫的數(shù)據(jù)類型轉(zhuǎn)化為 String 型,然后實現(xiàn)設(shè)置參數(shù)和獲取結(jié)果集的方法。

但是這個時候還沒有啟用 typeHandler

它還需要做如下所示的配置。

<typeHandlers>
    <typeHandler jdbcType="VARCHAR" javaType="string" handler="com.mybatis.test.MyTypeHandler"/>
</typeHandlers>

配置完成后系統(tǒng)才會讀取它,這樣注冊后,當 jdbcType 和 javaType 能與 MyTypeHandler 對應的時候,它就會啟動 MyTypeHandler。

有時候還可以顯式啟用 typeHandler,一般而言啟用這個 typeHandler 有兩種方式

如下所示。

....
<resultMap id="roleMapper" type="role">
    <result property="id" column="id"/>
    <result property="roleName" column="role_name" jdbcType="VARCHAR" javaType="string"/>
    <result property="note" column="note" typeHandler=" com.mybatis.test.MyTypeHandler"/>
</resultMap>
<select id="getRole" parameterType="long" resultMap="roleMapper">
    select id,role_name,note from t_role where id = #{id}
</select>
<select id="findRoles" parameterType="string" resultMap="roleMapper">
    select id, role_name, note from t_role
    where role_name like concat('%',#{roleName, jdbcType=VARCHAR,
    javaType=string}, '%')
</select>
<select id="findRoles2" parameterType="string" resultMap="roleMapper">
    select id, role_name, note from t_role
    where note like concat ('%', # {note, typeHandler=com.mybatis.test.MyTypeHandler},'%')
</select>
......

注意,要么指定了與自定義 typeHandler 一致的 jdbcType 和 javaType,要么直接使用 typeHandler 指定具體的實現(xiàn)類。

在一些因為數(shù)據(jù)庫返回為空導致無法斷定采用哪個 typeHandler 來處理,而又沒有注冊對應的 javaType 的 typeHandler 時,MyBatis 無法知道使用哪個 typeHandler 轉(zhuǎn)換數(shù)據(jù),我們可以采用這樣的方式來確定采用哪個 typeHandler 處理,這樣就不會有異常出現(xiàn)了。

有時候由于枚舉類型很多,系統(tǒng)需要的 typeHandler 也會很多,如果采用配置也會很麻煩,這個時候可以考慮使用包掃描的形式,那么就需要按照以下代碼配置了。

<typeHandlertype>
    <package name="com.mybatis.test"/>
</typeHandlertype>

只是這樣就沒法指定 jdbcType 和 javaType 了,不過我們可以使用注解來處理它們。我們把 MyTypeHandler 的聲明修改一下,如下所示。

@MappedTypes(String.class)
@MappedjdbcTypes(jdbcType.VARCHAR)
public class MyTypeHandler implements TypeHandler<String>{
    ......
}

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

相關(guān)文章

  • SpringBoot使用Redis的zset統(tǒng)計在線用戶信息

    SpringBoot使用Redis的zset統(tǒng)計在線用戶信息

    這篇文章主要介紹了SpringBoot使用Redis的zset統(tǒng)計在線用戶信息,幫助大家更好的理解和學習使用SpringBoot框架,感興趣的朋友可以了解下
    2021-04-04
  • 基于SpringAop中JoinPoint對象的使用說明

    基于SpringAop中JoinPoint對象的使用說明

    這篇文章主要介紹了基于SpringAop中JoinPoint對象的使用說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringBoot web開發(fā)源碼深入分析

    SpringBoot web開發(fā)源碼深入分析

    Web開發(fā)的核心內(nèi)容主要包括內(nèi)嵌的Servlet容器和SpringMVCSpringBoot使用起來非常簡潔,大部分配置都有SpringBoot自動裝配,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-10-10
  • SpringBoot使用Redis單機版過期鍵監(jiān)聽事件的實現(xiàn)示例

    SpringBoot使用Redis單機版過期鍵監(jiān)聽事件的實現(xiàn)示例

    在緩存的使用場景中經(jīng)常需要使用到過期事件,本文主要介紹了SpringBoot使用Redis單機版過期鍵監(jiān)聽事件的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-07-07
  • Java實現(xiàn)Windows計算器界面

    Java實現(xiàn)Windows計算器界面

    這篇文章主要為大家詳細介紹了Java實現(xiàn)Windows計算器界面,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Java編程用指定字符打印菱形實例

    Java編程用指定字符打印菱形實例

    本文主要介紹了用指定的字符打印菱形的方法實例,一個簡單容日上手的小程序,喜歡的朋友可以拿來練習一下。
    2017-09-09
  • SpringBoot中的Spring Cloud Hystrix原理和用法詳解

    SpringBoot中的Spring Cloud Hystrix原理和用法詳解

    在Spring Cloud中,Hystrix是一個非常重要的組件,Hystrix可以幫助我們構(gòu)建具有韌性的分布式系統(tǒng),保證系統(tǒng)的可用性和穩(wěn)定性,在本文中,我們將介紹SpringBoot中的Hystrix,包括其原理和如何使用,需要的朋友可以參考下
    2023-07-07
  • OpenFeign無法遠程調(diào)用問題及解決

    OpenFeign無法遠程調(diào)用問題及解決

    文章介紹了在使用Feign客戶端時遇到的讀超時問題,并分析了原因是系統(tǒng)啟動時未先加載Nacos配置,為了解決這個問題,建議將Nacos配置放在`bootstrap.yml`文件中,以便項目啟動時優(yōu)先加載Nacos配置
    2024-11-11
  • 史上最簡單的MyBatis動態(tài)SQL入門示例代碼

    史上最簡單的MyBatis動態(tài)SQL入門示例代碼

    動態(tài)sql,可以根據(jù)用戶對字段選擇和輸入,動態(tài)生成一條sql執(zhí)行。接下來通過本文給大家分享MyBatis動態(tài)SQL入門示例代碼,一起看看吧
    2017-03-03
  • SpringBoot詳解整合Spring?Cache實現(xiàn)Redis緩存流程

    SpringBoot詳解整合Spring?Cache實現(xiàn)Redis緩存流程

    這篇文章主要介紹了SpringBoot整合Spring?Cache實現(xiàn)Redis緩存方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07

最新評論