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

mybatis建立插入postgresql的json類(lèi)型數(shù)據(jù)的方法

 更新時(shí)間:2025年07月24日 08:53:42   作者:ljbguanli  
本文介紹如何通過(guò)自定義MyBatis JSON處理器,解決將JSON數(shù)據(jù)插入PostgreSQL json字段時(shí)的報(bào)錯(cuò)問(wèn)題,實(shí)現(xiàn)成功插入,感興趣的朋友一起看看吧

一、前言

最近在開(kāi)發(fā)需求時(shí),需要將json類(lèi)型的表字段插入數(shù)據(jù)庫(kù),而針對(duì)postgresql數(shù)據(jù)庫(kù),如果直接插入json字符串會(huì)報(bào)錯(cuò),那么針對(duì)這種情況,在不使用xml語(yǔ)句使用函數(shù)CAST強(qiáng)轉(zhuǎn)情況下,想要實(shí)現(xiàn)插入json類(lèi)型的數(shù)據(jù),那么就可以在java 字段上加入自定義json處理器,就可以實(shí)現(xiàn)了。

二、如何實(shí)現(xiàn)?

1.在定義的entity對(duì)象中,針對(duì)json類(lèi)型字段添加注解實(shí)現(xiàn)自定義json處理器,例如:

@Data
public class SyncLog implements Serializable {
  @TableId(type= IdType.INPUT)
  private Long id;
  @TableField(value = "content",typeHandler = JsonTypeHandler.class)
  private Object content;
  /**
  * 創(chuàng)建時(shí)間
  */
  private Date createTime;
  private static final long serialVersionUID = 1L;
}

其中content在數(shù)據(jù)庫(kù)中是json類(lèi)型。

2.JsonTypeHandler類(lèi)實(shí)現(xiàn)如下:

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.postgresql.util.PGobject;
import java.sql.*;
public class JsonTypeHandler extends BaseTypeHandler {
  private static final ObjectMapper objectMapper = new ObjectMapper();
  @Override
  public void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {
    String jsonString;
    try {
      if(parameter instanceof String){
        jsonString = (String) parameter;
      }else {
        jsonString = objectMapper.writeValueAsString(parameter);
      }
    } catch (JsonProcessingException e) {
      throw new SQLException("JsonTypeHandler JSON serialization error", e);
    }
    // 獲取數(shù)據(jù)庫(kù)類(lèi)型
    Connection connection = ps.getConnection();
    DatabaseMetaData metaData = connection.getMetaData();
    String databaseProductName = metaData.getDatabaseProductName().toLowerCase();
    if (databaseProductName.contains("postgresql")) {
      PGobject pgObject = new PGobject();
      pgObject.setType("json"); // 或者 "jsonb" 根據(jù)需求
      pgObject.setValue(jsonString);
      ps.setObject(i, pgObject);
    } else {
      //其他數(shù)據(jù)庫(kù)處理邏輯
      ps.setString(i, jsonString);
    }
  }
  @Override
  public Object getNullableResult(ResultSet rs, String columnName) throws SQLException {
    return parseJson(rs.getString(columnName));
  }
  @Override
  public Object getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
    return parseJson(rs.getString(columnIndex));
  }
  @Override
  public Object getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
    return parseJson(cs.getString(columnIndex));
  }
  private Object parseJson(String json) throws SQLException {
    if (json == null) {
      return null;
    }
    try {
      return objectMapper.readTree(json);
    } catch (Exception e) {
      throw new SQLException("JsonTypeHandler JSON deserialization error", e);
    }
  }
}

3.接下來(lái)定義一個(gè)DAO。

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface SyncLogDao extends BaseMapper {
}

4.然后插入一條數(shù)據(jù),如果可以插入這條json數(shù)據(jù),表明自定義的JsonTypeHandler已生效。

@RunWith(SpringRunner.class)
@SpringBootTest(classes= AIAssetExternalApplication.class)
public class IntegrationTest {
  @Autowired
  SyncLogDao syncLogDao;
  @Test
  public void sync() throws Exception {
    SyncLog syncLog = new SyncLog();
    syncLog.setId(1L);
    String jsonStr="{\"size\": 3474046}";
    syncLog.setContent(jsonStr);
    syncLogDao.insert(syncLog);
  }
}

結(jié)果插入成功,自定義的JsonTypeHandler生效。

到此這篇關(guān)于mybatis建立插入postgresql的json類(lèi)型數(shù)據(jù)的文章就介紹到這了,更多相關(guān)mybatis json類(lèi)型數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot中集成IP2Region實(shí)現(xiàn)高效IP地址地理位置查詢(xún)

    SpringBoot中集成IP2Region實(shí)現(xiàn)高效IP地址地理位置查詢(xún)

    IP2Region是一個(gè)高效的IP地址地理位置查詢(xún)庫(kù),能夠快速根據(jù)IP地址獲取其地理位置信息,它支持IPv4和IPv6地址的查詢(xún),并提供多種緩存方式來(lái)優(yōu)化查詢(xún)性能,在這篇博客中,我們將介紹如何將IP2Region集成到SpringBoot項(xiàng)目中,實(shí)現(xiàn)IP地址的地理位置查詢(xún)服務(wù)
    2025-12-12
  • Java遍歷Map的方法匯總

    Java遍歷Map的方法匯總

    大家平時(shí)在使用Java開(kāi)發(fā)時(shí),經(jīng)常會(huì)遇到遍歷Map對(duì)象的問(wèn)題,本文就給大家介紹幾種Java遍歷Map對(duì)象的方法,并簡(jiǎn)單分析一下每種方法的效率,需要的朋友可以參考下
    2023-12-12
  • SpringBoot集成Druid的實(shí)例代碼

    SpringBoot集成Druid的實(shí)例代碼

    這篇文章主要介紹了SpringBoot集成Druid的實(shí)例代碼,有依賴(lài)和配置相關(guān)內(nèi)容,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-12-12
  • java中String的一些方法深入解析

    java中String的一些方法深入解析

    以下是對(duì)java中String的一些方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以參考下
    2013-07-07
  • Java日期接收?qǐng)?bào)錯(cuò):could?not?be?parsed,?unparsed?text?found?at?index?10解決辦法

    Java日期接收?qǐng)?bào)錯(cuò):could?not?be?parsed,?unparsed?text?found?a

    在做Java開(kāi)發(fā)時(shí)肯定會(huì)碰到傳遞時(shí)間參數(shù)的情況,這篇文章主要給大家介紹了關(guān)于Java日期接收?qǐng)?bào)錯(cuò):could?not?be?parsed,?unparsed?text?found?at?index?10的解決辦法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • Spring Security中successHandler無(wú)效問(wèn)題及解決

    Spring Security中successHandler無(wú)效問(wèn)題及解決

    這篇文章主要介紹了Spring Security中successHandler無(wú)效問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • java獲取和設(shè)置系統(tǒng)變量問(wèn)題(環(huán)境變量)

    java獲取和設(shè)置系統(tǒng)變量問(wèn)題(環(huán)境變量)

    這篇文章主要介紹了java獲取和設(shè)置系統(tǒng)變量問(wèn)題(環(huán)境變量),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Java基礎(chǔ)知識(shí)之ByteArrayOutputStream流的使用

    Java基礎(chǔ)知識(shí)之ByteArrayOutputStream流的使用

    這篇文章主要介紹了Java基礎(chǔ)知識(shí)之ByteArrayOutputStream流的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • SpringBoot/SpringCloud使用jasypt-spring-boot實(shí)現(xiàn)配置文件加密

    SpringBoot/SpringCloud使用jasypt-spring-boot實(shí)現(xiàn)配置文件加密

    在現(xiàn)代軟件開(kāi)發(fā)和部署中,應(yīng)用程序的配置文件常常包含敏感信息,本文將詳細(xì)介紹如何使用 jasypt-spring-boot 庫(kù),在 Spring Boot 和 Spring Cloud 項(xiàng)目中實(shí)現(xiàn)配置文件內(nèi)容的加密與解密,需要的朋友可以參考下
    2026-05-05
  • des加密解密JAVA與.NET互通實(shí)例

    des加密解密JAVA與.NET互通實(shí)例

    這篇文章主要介紹了des加密解密JAVA與.NET互通實(shí)例,大家參考使用吧
    2013-12-12

最新評(píng)論

镇远县| 金湖县| 石屏县| 白城市| 雅安市| 丰城市| 平舆县| 邓州市| 连州市| 巫溪县| 闽侯县| 灵石县| 毕节市| 宁乡县| 额济纳旗| 岱山县| 乌拉特中旗| 和政县| 库车县| 晋宁县| 四子王旗| 察隅县| 宿州市| 敦煌市| 五河县| 区。| 仁寿县| 邢台县| 于田县| 祁门县| 肃宁县| 闵行区| 瑞金市| 晋江市| 永安市| 台东县| 石渠县| 福贡县| 嘉荫县| 洛隆县| 嘉兴市|