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

Mybatis 自定義類型處理器示例詳解

 更新時(shí)間:2023年10月17日 16:48:16   作者:逆水行舟x  
在某些情況下我們需要對(duì)類型做處理,例如數(shù)據(jù)存儲(chǔ)的是Long,程序里是BigDecimal,那么我們出庫(kù)入庫(kù)都需要做處理,此時(shí)就可以使用類型處理器,本文通過(guò)示例給大家介紹Mybatis 自定義類型處理器的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧

前言

在某些情況下我們需要對(duì)類型做處理。
例如數(shù)據(jù)存儲(chǔ)的是Long。程序里是BigDecimal,那么我們出庫(kù)入庫(kù)都需要做處理。此時(shí)就可以使用類型處理器
我們從@TableFiel入手,其中有一個(gè)字段typeHandler如下圖

對(duì)于注釋上的建議事實(shí)也確實(shí)如此,如果我們?cè)?code>xml中沒(méi)有定義這個(gè)實(shí)體的ResultMap那么需要將autoResultMap賦值為ture

要求類型是TypeHandler的實(shí)現(xiàn)類即可。

我們看到實(shí)際上已經(jīng)有很多的類型處理器了

它們都是一些默認(rèn)的類型處理器,下面是官網(wǎng)的解釋
mybatis – MyBatis 3 | 配置

BaseTypeHandler

我們可以繼承BaseTypeHandler,來(lái)自定義一個(gè)類型處理器。

/**
 * @author YinShangwen
 * @since 2023/10/16 9:36
 */
// 指定 Java 類型
@MappedTypes({String.class})
// 指定 jdbc 類型
@MappedJdbcTypes({JdbcType.VARCHAR})
public class StringTypeHandler extends BaseTypeHandler<String> {
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
        // 設(shè)置值
    }
    @Override
    public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
        // 獲得值
        return null;
    }
    @Override
    public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        // 獲得值
        return null;
    }
    @Override
    public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        // 獲得值
        return null;
    }
}

假設(shè)我們這里給入庫(kù)的字符串的末尾加上.ysw的后綴
出庫(kù)的時(shí)候去除添加的后綴,完整代碼如下:

/**
 * @author YinShangwen
 * @since 2023/10/16 9:36
 */
@MappedTypes({String.class})
@MappedJdbcTypes({JdbcType.VARCHAR})
public class StringTypeHandler extends BaseTypeHandler<String> {
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
        if (StringUtils.isNotBlank(parameter)) {
            ps.setString(i, parameter + ".ysw");
        }
    }
    @Override
    public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
        String ret = rs.getString(columnName);
        return ret != null ? ret.substring(0, ret.length() - 4) : null;
    }
    @Override
    public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        String ret = rs.getString(columnIndex);
        return ret != null ? ret.substring(0, ret.length() - 4) : null;
    }
    @Override
    public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        String ret = cs.getString(columnIndex);
        return ret != null ? ret.substring(0, ret.length() - 4) : null;
    }
}

AbstractJsonTypeHandler

AbstractJsonTypeHandler是對(duì)于json類型的處理器,繼承該類可以很方便的完成
具體代碼如下:

/**
 * @author YinShangwen
 * @since 2023/10/16 8:55
 */
@MappedTypes({Map.class})
@MappedJdbcTypes({JdbcType.JAVA_OBJECT})
public class LongMapJsonTypeHandler extends AbstractJsonTypeHandler<Map<Long, List<Demo>>> {
    @Override
    protected Map<Long, List<Demo>> parse(String json) {
        return JSON.parseObject(json, new TypeReference<Map<Long, List<RangeConfigDTO>>>() {
        });
    }
    @Override
    protected String toJson(Map<Long, List<Demo>> obj) {
        return JSON.toJSONString(obj);
    }
}

使用

??注意:必須開啟@TableName(autoResultMap = true)

@TableField(typeHandler = StringTypeHandler.class)
<result column="demo_config" property="demoConfig" typeHandler="com.ysw.type_handler.LongMapJsonTypeHandler"/>

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

相關(guān)文章

  • JavaMail實(shí)現(xiàn)帶附件的郵件發(fā)送

    JavaMail實(shí)現(xiàn)帶附件的郵件發(fā)送

    這篇文章主要為大家詳細(xì)介紹了JavaMail實(shí)現(xiàn)帶附件的郵件發(fā)送,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Java經(jīng)典面試題匯總:Spring MVC

    Java經(jīng)典面試題匯總:Spring MVC

    本篇總結(jié)的是Spring MVC框架相關(guān)的面試題,后續(xù)會(huì)持續(xù)更新,希望我的分享可以幫助到正在備戰(zhàn)面試的實(shí)習(xí)生或者已經(jīng)工作的同行,如果發(fā)現(xiàn)錯(cuò)誤還望大家多多包涵,不吝賜教,謝謝
    2021-07-07
  • Mybatis-plus獲取雪花算法生成的ID并返回生成ID

    Mybatis-plus獲取雪花算法生成的ID并返回生成ID

    本文主要介紹了Mybatis-plus獲取雪花算法生成的ID并返回生成ID,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • java如何動(dòng)態(tài)的處理接口的返回?cái)?shù)據(jù)

    java如何動(dòng)態(tài)的處理接口的返回?cái)?shù)據(jù)

    本文主要介紹了java如何動(dòng)態(tài)的處理接口的返回?cái)?shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • rabbitmq的消息持久化處理開啟,再關(guān)閉后,消費(fèi)者啟動(dòng)報(bào)錯(cuò)問(wèn)題

    rabbitmq的消息持久化處理開啟,再關(guān)閉后,消費(fèi)者啟動(dòng)報(bào)錯(cuò)問(wèn)題

    這篇文章主要介紹了rabbitmq的消息持久化處理開啟,再關(guān)閉后,消費(fèi)者啟動(dòng)報(bào)錯(cuò)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Java使用Javassist動(dòng)態(tài)生成HelloWorld類

    Java使用Javassist動(dòng)態(tài)生成HelloWorld類

    Javassist是一個(gè)非常強(qiáng)大的字節(jié)碼操作和定義庫(kù),它允許開發(fā)者在運(yùn)行時(shí)創(chuàng)建新的類或者修改現(xiàn)有的類,本文將簡(jiǎn)單介紹如何使用Javassist動(dòng)態(tài)生成HelloWorld類,需要的可以了解下
    2025-09-09
  • 基于CyclicBarrier和CountDownLatch的使用區(qū)別說(shuō)明

    基于CyclicBarrier和CountDownLatch的使用區(qū)別說(shuō)明

    這篇文章主要介紹了基于CyclicBarrier和CountDownLatch的使用區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • Java Morris遍歷算法及其在二叉樹中的應(yīng)用

    Java Morris遍歷算法及其在二叉樹中的應(yīng)用

    Morris遍歷是一種基于線索二叉樹的遍歷算法,可以在不使用?;蜻f歸的情況下,實(shí)現(xiàn)二叉樹的前序、中序和后序遍歷。該算法利用二叉樹中的空指針或線索指針,將遍歷序列嵌入到原二叉樹中,實(shí)現(xiàn)了常數(shù)級(jí)別的空間復(fù)雜度,適用于對(duì)空間要求較高的場(chǎng)景
    2023-04-04
  • 在Spring中自動(dòng)裝配Bean的屬性

    在Spring中自動(dòng)裝配Bean的屬性

    今天小編就為大家分享一篇關(guān)于在Spring中自動(dòng)裝配Bean的屬性,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • Java多線程編程:線程的原理和使用安全

    Java多線程編程:線程的原理和使用安全

    文章主要介紹了線程的基本概念、線程和進(jìn)程的區(qū)別、線程的創(chuàng)建方法、線程的常見方法與屬性、線程的安全問(wèn)題等,線程是程序執(zhí)行流的最小單位,可以并發(fā)執(zhí)行并共享數(shù)據(jù),線程的生命周期狀態(tài)包括新建、就緒、運(yùn)行、阻塞、死亡等
    2026-05-05

最新評(píng)論

安新县| 徐州市| 卫辉市| 安图县| 九江县| 汶上县| 芦溪县| 绥阳县| 德化县| 洞口县| 大足县| 双柏县| 且末县| 馆陶县| 佛教| 如东县| 彭州市| 中江县| 延津县| 凤台县| 平凉市| 泾源县| 盐亭县| 盐城市| 墨脱县| 嘉禾县| 皮山县| 太湖县| 三亚市| 读书| 增城市| 靖安县| 铅山县| 罗平县| 宜春市| 万山特区| 博客| 竹溪县| 铅山县| 江永县| 广汉市|