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

Java中的BaseTypeHandler自定義類型轉(zhuǎn)換器的使用

 更新時間:2022年05月22日 08:38:10   作者:??SITING????  
這篇文章主要介紹了Java中的BaseTypeHandler自定義類型轉(zhuǎn)換器的使用,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下

簡述

mysq5.7之后新增了json類型,但是在使用的過程中,Json數(shù)組中的值小于Integer.MAX_VALUE,則反序列化時會轉(zhuǎn)成List類型,假設(shè)我們用的是List類型的話就會碰到類型轉(zhuǎn)換錯誤的異常。

通用的類型轉(zhuǎn)換器(存在一些問題)

此方法可以返回對象的calss,自動轉(zhuǎn)成對應(yīng)的類型,但是在碰到List 類型的時候,由于calss只能獲取到j(luò)ava.util.List類型無法獲取List里對象的類型,就會導(dǎo)致會使用fastJson的默認轉(zhuǎn)換類型,也就是當Json數(shù)組中的值小于Integer.MAX_VALUE,則反序列化時會轉(zhuǎn)成List類型。所以當碰到這種情況時,可以使用以下方法。

@MappedJdbcTypes(value = JdbcType.VARCHAR)
public class JsonTypeHandler<T extends Object> extends BaseTypeHandler<T> {
    private static ObjectMapper mapper = new ObjectMapper();
    private Class<T> clazz;
    public JsonTypeHandler(Class<T> clazz) {
        if (clazz == null) {
            throw new IllegalArgumentException("Type argument cannot be null");
        }
        this.clazz = clazz;
    }
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException {
        ps.setString(i, this.toJson(parameter));
    }
    @Override
    public T getNullableResult(ResultSet rs, String columnName) throws SQLException {
        return this.toObject(rs.getString(columnName), clazz);
    }
    @Override
    public T getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        return this.toObject(rs.getString(columnIndex), clazz);
    }
    @Override
    public T getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        return this.toObject(cs.getString(columnIndex), clazz);
    }
    private String toJson(T object) {
        try {
            return mapper.writeValueAsString(object);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    private T toObject(String content, Class<?> clazz) {
        if (content != null && !content.isEmpty()) {
            try {
                return (T) mapper.readValue(content, clazz);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        } else {
            return null;
        }
    }
}

定制類型轉(zhuǎn)換器

指定返回值只能是 List

@MappedJdbcTypes(value = JdbcType.VARCHAR)
@MappedTypes(List.class)
public class JsonListLongTypeHandler extends BaseTypeHandler<List<Long>> {
    private static final ObjectMapper objectMapper = new ObjectMapper();
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, List<Long> parameter, JdbcType jdbcType) throws SQLException {
        ps.setString(i, JSON.toJSONString(parameter));
    }
    @Override
    public List<Long> getNullableResult(ResultSet rs, String columnName) throws SQLException {
        return this.getLongs(rs.getString(columnName));
    }
    @Override
    public List<Long> getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        return this.getLongs(rs.getString(columnIndex));
    }
    @Override
    public List<Long> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        return this.getLongs(cs.getString(columnIndex));
    }
    private List<Long> getLongs(String value) {
        if (StringUtils.hasText(value)) {
            try {
                CollectionType type = objectMapper.getTypeFactory().constructCollectionType(ArrayList.class, Long.class);
                Object o1 = objectMapper.readValue(value, type);                List<Long> o = objectMapper.readValue(value, type);
                return o;
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
}

到此這篇關(guān)于Java中的BaseTypeHandler自定義類型轉(zhuǎn)換器的使用的文章就介紹到這了,更多相關(guān)BaseTypeHandler內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springboot使用cache緩存過程代碼實例

    Springboot使用cache緩存過程代碼實例

    這篇文章主要介紹了Springboot使用cache緩存過程代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • SpringCloud微服務(wù)集成Dubbo的詳細過程

    SpringCloud微服務(wù)集成Dubbo的詳細過程

    Apache?Dubbo?是一款易用、高性能的?WEB?和?RPC?框架,同時為構(gòu)建企業(yè)級微服務(wù)提供服務(wù)發(fā)現(xiàn)、流量治理、可觀測、認證鑒權(quán)等能力、工具與最佳實踐,這篇文章主要介紹了SpringCloud微服務(wù)集成Dubbo,需要的朋友可以參考下
    2024-03-03
  • 詳解Java Callable接口實現(xiàn)多線程的方式

    詳解Java Callable接口實現(xiàn)多線程的方式

    這篇文章主要介紹了詳解Java Callable接口實現(xiàn)多線程的方式,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • SpringBoot 注解事務(wù)聲明式事務(wù)的方式

    SpringBoot 注解事務(wù)聲明式事務(wù)的方式

    springboot使用上述注解的幾種方式開啟事物,可以達到和xml中聲明的同樣效果,但是卻告別了xml,使你的代碼遠離配置文件。今天就扒一扒springboot中事務(wù)使用注解的玩法,感興趣的朋友一起看看吧
    2017-09-09
  • Java反應(yīng)式框架Reactor中的Mono和Flux

    Java反應(yīng)式框架Reactor中的Mono和Flux

    這篇文章主要介紹了Java反應(yīng)式框架Reactor中的Mono和Flux,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • Java打印數(shù)組的三種方法整理

    Java打印數(shù)組的三種方法整理

    許多學(xué)編程專業(yè)的同學(xué)面試的時候,考官都會問到Java如何打印數(shù)組這樣的問題,下面這篇文章主要給大家介紹了關(guān)于Java打印數(shù)組的三種方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • Spring的異常處理@ExceptionHandler注解解析

    Spring的異常處理@ExceptionHandler注解解析

    這篇文章主要介紹了Spring的異常處理@ExceptionHandler注解解析,當一個Controller中有方法加了@ExceptionHandler之后,這個Controller其他方法中沒有捕獲的異常就會以參數(shù)的形式傳入加了@ExceptionHandler注解的那個方法中,需要的朋友可以參考下
    2023-12-12
  • 配置springboot項目動靜分離打包分離lib方式

    配置springboot項目動靜分離打包分離lib方式

    本文介紹了如何將Spring?Boot工程中的靜態(tài)資源和配置文件分離出來,以減少jar包大小,方便修改配置文件,通過在jar包同級目錄創(chuàng)建config目錄,并在pom文件中進行相應(yīng)配置,可以實現(xiàn)配置文件的外部化,打包后的jar包和lib文件夾中分別存放了第三方j(luò)ar包和靜態(tài)資源文件
    2025-02-02
  • SpringBoot之HandlerInterceptor攔截器的使用詳解

    SpringBoot之HandlerInterceptor攔截器的使用詳解

    這篇文章主要介紹了SpringBoot之HandlerInterceptor攔截器的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Spring batch批處理框架

    Spring batch批處理框架

    本文主要介紹了Spring batch批處理框架的相關(guān)知識。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-04-04

最新評論

湛江市| 白银市| 临潭县| 翁牛特旗| 柳林县| 体育| 广元市| 微山县| 罗山县| 白水县| 蕉岭县| 弥勒县| 交口县| 银川市| 湘西| 垣曲县| 江源县| 三穗县| 温泉县| 沙田区| 准格尔旗| 蚌埠市| 吉林省| 潍坊市| 长治市| 和顺县| 喀喇| 沙坪坝区| 河西区| 大冶市| 新田县| 博爱县| 文化| 光泽县| 荔浦县| 乌兰浩特市| 耒阳市| 遂宁市| 井陉县| 凌海市| 望谟县|