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

MyBatis寫入Json字段以及Json字段轉(zhuǎn)對象示例詳解

 更新時間:2023年07月21日 11:32:53   作者:頭發(fā)怎么還有這么多  
這篇文章主要給大家介紹了關(guān)于MyBatis寫入Json字段以及Json字段轉(zhuǎn)對象的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、背景

最近在設(shè)計表結(jié)構(gòu)的時候,根據(jù)需求,將一個字段的類型設(shè)計為Json字段,而對于還沒有操作過數(shù)據(jù)庫Json字段的我就有點(diǎn)懵了,之前從未遇到這種情況,所以也是一步步研究一步步踩坑,最后終于是把Json字段讀取的坑都踩遍了,希望這篇文章可以幫助到大家,有問題留言

二、需求描述

本來打算貼表結(jié)構(gòu)圖的,奈何不知道為什么貼上來總是無法顯示,所以就直接貼實(shí)體類結(jié)構(gòu)吧需求是要直接將ParameterEntitylimiting屬性寫入json字段并且在做查詢的時候需要將json字段中的值直接映射到實(shí)體類上
@Data
@Builder
@ToString
public class ParameterEntity {
    private String device;
    private String recipe;
    private String parameter;
    private String name;
    private String type;
    private String valueType;
    // 這個字段就對應(yīng)表中的json字段 
    private ParameterLimiting limiting;
}

三、準(zhǔn)備環(huán)境

這里我使用的是pg數(shù)據(jù)庫,如下是pg庫的配置
特別注意!??!
jdbcUrl中的tringtype=unspecified一定要加,否則會報一個寫入類型不匹配的錯誤,其他數(shù)據(jù)庫可能也需要指定tringtype,這里就暫時不做研究
  datasource:
    pgsql:
      jdbcUrl: jdbc:postgresql://ip:5432/ams?rewriteBatchedStatements=true&stringtype=unspecified
      username: 
      password: 
      driver-class-name: org.postgresql.Driver

四、Json字段數(shù)據(jù)的寫入

核心:字符串轉(zhuǎn)Json的控制類

1. 定義對象轉(zhuǎn)Json的控制類

// 這里對應(yīng)表中字段的類型
@MappedJdbcTypes(JdbcType.OTHER)
// 這里對應(yīng)實(shí)體類的類型
@MappedTypes(ParameterLimiting.class)
public class ParameterLimitingToJsonHandler extends BaseTypeHandler<ParameterLimiting> {
    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, ParameterLimiting parameterLimiting, JdbcType jdbcType) throws SQLException {
    	// 做寫入操作時將對象轉(zhuǎn)成json字符串
        preparedStatement.setObject(i, JSON.toJSONString(parameterLimiting));
    }
    @Override
    public ParameterLimiting getNullableResult(ResultSet resultSet, String s) throws SQLException {
        return null;
    }
    @Override
    public ParameterLimiting getNullableResult(ResultSet resultSet, int i) throws SQLException {
        return null;
    }
    @Override
    public ParameterLimiting getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        return null;
    }
}

2. 寫mapper文件

<insert id="addParameter" parameterType="com.inventec.dm.entity.po.ParameterEntity">
        INSERT INTO dap.parameter
        ("device", "recipe", "parameter", "name", "type", "valueType", "limiting")
        VALUES (#{device}, #{recipe}, #{parameter}, #{name}, #{type}, #{valueType},
        		<!--  這里需要指定 jdbcType 及 typeHandler 屬性,這里的 typeHandler 也就是我們剛寫的對象轉(zhuǎn)Json的控制類  -->
                #{limiting,jdbcType=OTHER,typeHandler=com.inventec.dm.config.ParameterLimitingToJsonHandler});
</insert>

到這里對象寫入json字段就告一段落了

五、Json字段轉(zhuǎn)對象

核心:實(shí)體類的有參構(gòu)造

1. mapper文件

<select id="getParametersByDeviceId" resultMap="parameterToParameterEntity">
        SELECT *
        FROM dap.parameter
        WHERE device = #{device};
</select>
<resultMap id="parameterToParameterEntity" type="com.inventec.dm.entity.po.ParameterEntity">
        <result property="device" column="device"/>
        <result property="recipe" column="recipe"/>
        <result property="parameter" column="parameter"/>
        <result property="name" column="name"/>
        <result property="type" column="type"/>
        <result property="valueType" column="valueType"/>
        <-- 這里需要指定jdbcType、javaType、typeHandler屬性,其中typeHandler還是上邊的轉(zhuǎn)換控制類 -->
        <result property="limiting" column="limiting"
                jdbcType="OTHER" javaType="com.inventec.dm.entity.parameter.ParameterLimiting"
                typeHandler="com.inventec.dm.config.ParameterLimitingToJsonHandler"/>
</resultMap>

2. 構(gòu)造函數(shù)

@Data
@Builder
@ToString
public class ParameterEntity {
    private String device;
    private String recipe;
    private String parameter;
    private String name;
    private String type;
    private String valueType;
    private ParameterLimiting limiting;
    // 這個實(shí)體類中不能有無參構(gòu)造,否則在映射json字段時不執(zhí)行有參構(gòu)造
    // 注意這里最后的一個參數(shù)是 Object limiting,而不是 ParameterLimiting limiting
    public ParameterEntity(String device, String recipe, String parameter, String name, String type, String valueType, Object limiting) {
        this.device = device;
        this.recipe = recipe;
        this.parameter = parameter;
        this.name = name;
        this.type = type;
        this.valueType = valueType;
        if (limiting != null) {
            this.limiting = JSON.parseObject(limiting.toString(), ParameterLimiting.class);
        }
    }
}

注意:

  • 這個實(shí)體類中不能有無參構(gòu)造,否則在映射json字段時不執(zhí)行有參構(gòu)造,也就是說無法轉(zhuǎn)換對象!切記?。?!
  • 注意這里最后的一個參數(shù) Object limiting,定義為Object類型也是為了使其可以接收表中json字的值同時也符合有參構(gòu)造參數(shù)的類型(也就是說如果把Object改為String的話編譯會報錯)

到這里Json字段的寫入和讀取就大工告成了

六、最后

到此這篇關(guān)于MyBatis寫入Json字段以及Json字段轉(zhuǎn)對象的文章就介紹到這了,更多相關(guān)MyBatis寫入Json字段內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于@RequestParam注解的使用(簡單易懂)

    關(guān)于@RequestParam注解的使用(簡單易懂)

    這篇文章主要介紹了關(guān)于@RequestParam注解的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Springboot整合GuavaCache緩存過程解析

    Springboot整合GuavaCache緩存過程解析

    這篇文章主要介紹了springboot整合GuavaCache緩存過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • 淺談Slf4j與其他日志系統(tǒng)兼容的使用方法

    淺談Slf4j與其他日志系統(tǒng)兼容的使用方法

    下面小編就為大家分享一篇淺談Slf4j與其他日志系統(tǒng)兼容的使用方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • idea?springBoot項(xiàng)目自動注入mapper為空報錯的解決方法

    idea?springBoot項(xiàng)目自動注入mapper為空報錯的解決方法

    這篇文章主要介紹了idea?springBoot項(xiàng)目自動注入mapper為空報錯的解決方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • spring boot如何使用spring AOP實(shí)現(xiàn)攔截器

    spring boot如何使用spring AOP實(shí)現(xiàn)攔截器

    本篇文章主要介紹了spring boot如何使用spring AOP實(shí)現(xiàn)攔截器,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • Java?實(shí)現(xiàn)使用Comparable按照我們指定的規(guī)則排序

    Java?實(shí)現(xiàn)使用Comparable按照我們指定的規(guī)則排序

    這篇文章主要介紹了Java?如何使用Comparable按照我們指定的規(guī)則排序,通過練習(xí)創(chuàng)建TreeSet集合使用無參構(gòu)造方法,并按照年齡從小到大的順序排序,若年齡相同再按照姓名的字母順序排序展開內(nèi)容,需要的朋友可以參考一下
    2022-04-04
  • JavaWeb Maven詳解相關(guān)配置

    JavaWeb Maven詳解相關(guān)配置

    這篇文章主要介紹了使用maven架構(gòu)管理開發(fā)的相關(guān)配置,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java8 CompletableFuture詳解

    Java8 CompletableFuture詳解

    這篇文章主要介紹了Java8 CompletableFuture詳解,CompletableFuture extends Future提供了方法,一元操作符和促進(jìn)異步性以及事件驅(qū)動編程模型,需要的朋友可以參考下
    2014-06-06
  • Kotlin基礎(chǔ)教程之dataclass,objectclass,use函數(shù),類擴(kuò)展,socket

    Kotlin基礎(chǔ)教程之dataclass,objectclass,use函數(shù),類擴(kuò)展,socket

    這篇文章主要介紹了Kotlin基礎(chǔ)教程之dataclass,objectclass,use函數(shù),類擴(kuò)展,socket的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • SpringBoot如何將applicaton.properties中的數(shù)據(jù)綁定到bean中

    SpringBoot如何將applicaton.properties中的數(shù)據(jù)綁定到bean中

    SpringBoot中我們該如何將applicaton.properties中的數(shù)據(jù)綁定到bean中呢?在之間我們是可以通過@value注解,在SpringBoot自動啟動后,會自動的去相應(yīng)的路徑中去尋找applicaton.properties配置文件,然后將相應(yīng)的值賦值上,感興趣的朋友一起看看吧
    2025-05-05

最新評論

漳浦县| 正宁县| 福安市| 桦南县| 莱西市| 阳城县| 聂拉木县| 临海市| 佛坪县| 姚安县| 鄂州市| 孟连| 颍上县| 拉萨市| 龙胜| 龙海市| 鲁甸县| 黔西县| 黄陵县| 密山市| 旬阳县| 通山县| 新河县| 隆尧县| 宜丰县| 平邑县| 新密市| 洪江市| 海淀区| 达拉特旗| 闽侯县| 天水市| 江孜县| 株洲县| 烟台市| 延庆县| 乐昌市| 都兰县| 宾川县| 富川| 南安市|