最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis中的自定義TypeHandler詳解

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

要實(shí)現(xiàn) typeHandler 就需要去實(shí)現(xiàn)接口 typeHandler,或者繼承 BaseTypeHandler(實(shí)際上,BaseTypeHandler 實(shí)現(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 型,然后實(shí)現(xiàn)設(shè)置參數(shù)和獲取結(jié)果集的方法。

但是這個(gè)時(shí)候還沒有啟用 typeHandler

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

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

配置完成后系統(tǒng)才會(huì)讀取它,這樣注冊(cè)后,當(dāng) jdbcType 和 javaType 能與 MyTypeHandler 對(duì)應(yīng)的時(shí)候,它就會(huì)啟動(dòng) MyTypeHandler。

有時(shí)候還可以顯式啟用 typeHandler,一般而言啟用這個(gè) 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 指定具體的實(shí)現(xiàn)類。

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

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

<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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解ZXing-core生成二維碼的方法并解析

    詳解ZXing-core生成二維碼的方法并解析

    本文給大家介紹ZXing-core生成二維碼的方法并解析,主要用到goggle發(fā)布的jar來實(shí)現(xiàn)二維碼功能,對(duì)此文感興趣的朋友一起學(xué)習(xí)吧
    2016-05-05
  • MyBatis-Plus實(shí)現(xiàn)字段自動(dòng)填充功能的示例

    MyBatis-Plus實(shí)現(xiàn)字段自動(dòng)填充功能的示例

    本文主要介紹了MyBatis-Plus實(shí)現(xiàn)字段自動(dòng)填充功能的示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Java集成presto查詢方式

    Java集成presto查詢方式

    這篇文章主要介紹了Java集成presto查詢方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java中JVM的類加載器詳解

    Java中JVM的類加載器詳解

    這篇文章主要介紹了Java中的類加載器詳解,從概念上來講, 自定義類加載器一般指的是程序中由開發(fā)人員自定義的類加載器,但是Java虛擬機(jī)規(guī)范卻沒有這么定義,而是將所有派生于抽象類ClassLoader的類加載器都劃分為自定義類加載器,需要的朋友可以參考下
    2023-07-07
  • MyBatis之一級(jí)緩存和二級(jí)緩存問題

    MyBatis之一級(jí)緩存和二級(jí)緩存問題

    這篇文章主要介紹了MyBatis之一級(jí)緩存和二級(jí)緩存問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 淺談log4j 不打印異常堆棧

    淺談log4j 不打印異常堆棧

    這篇文章主要介紹了淺談log4j 不打印異常堆棧,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • Java編程Iterator迭代器設(shè)計(jì)原理及實(shí)現(xiàn)代碼示例

    Java編程Iterator迭代器設(shè)計(jì)原理及實(shí)現(xiàn)代碼示例

    這篇文章主要介紹了Java編程Iterator迭代器設(shè)計(jì)原理及實(shí)現(xiàn)代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • 深入解析Java中的JDBC事務(wù)

    深入解析Java中的JDBC事務(wù)

    這篇文章主要介紹了深入解析Java中的JDBC事務(wù),包含了Java多線程的事務(wù)并發(fā)等知識(shí),需要的朋友可以參考下
    2015-08-08
  • java樂觀鎖原理與實(shí)現(xiàn)案例分析

    java樂觀鎖原理與實(shí)現(xiàn)案例分析

    這篇文章主要介紹了java樂觀鎖原理與實(shí)現(xiàn),結(jié)合具體案例形式分析了樂觀鎖的原理及java使用樂觀鎖實(shí)現(xiàn)自動(dòng)派單功能的相關(guān)操作技巧,需要的朋友可以參考下
    2019-10-10
  • Junit Mockito實(shí)現(xiàn)單元測(cè)試方法介紹

    Junit Mockito實(shí)現(xiàn)單元測(cè)試方法介紹

    JUnit是用于編寫和運(yùn)行可重復(fù)的自動(dòng)化測(cè)試開源測(cè)試項(xiàng)目框架,這樣可以保證我們的代碼按與其工作。JUnit可廣泛用于工業(yè)和作為支架(從命令行)或IDE(如IDE)內(nèi)單獨(dú)的java程序
    2022-09-09

最新評(píng)論

苍山县| 马关县| 礼泉县| 旬邑县| 山阳县| 交城县| 怀集县| 大荔县| 枣庄市| 胶州市| 调兵山市| 平陆县| 栾川县| 无极县| 永泰县| 广元市| 鄯善县| 观塘区| 泽库县| 安图县| 治县。| 瓦房店市| 固原市| 金塔县| 乃东县| 玉田县| 梁平县| 惠来县| 禹州市| 青州市| 康定县| 略阳县| 云安县| 都昌县| 灵寿县| 平和县| 阳山县| 嘉祥县| 许昌市| 思南县| 中阳县|