当前位置: 首页 > news >正文

mybatis连接PGSQL中对于json和jsonb的处理

pgsql数据库表字段设置了jsonb格式;在java的实体里使用String或者对象转换会一直提示一个错误:

Caused by: org.postgresql.util.PSQLException: ERROR: column "xx" is of type jsonb but expression is of type character varying

需要加一个转换方法:


import com.alibaba.fastjson.JSON;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedTypes;
import org.postgresql.util.PGobject;import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;/***  PGJsonTypeHandler:处理Object对象类型与postgresql中JSONB类型之间的转换*  author:lipu*  created_at:2021/07/29 14:00*/
@SuppressWarnings("unchecked")
@MappedTypes(value = {Object.class})
public class PGJsonbTypeHandler<T extends Object> extends BaseTypeHandler<T> {private static final PGobject pgObject = new PGobject();@Overridepublic void setNonNullParameter(PreparedStatement preparedStatement, int i, T parameter, JdbcType jdbcType) throws SQLException {if (preparedStatement != null) {pgObject.setType("jsonb");pgObject.setValue(JSON.toJSONString(parameter));preparedStatement.setObject(i, pgObject);}}@Overridepublic T getNullableResult(ResultSet rs, String columnName) throws SQLException {return (T) JSON.parse(rs.getString(columnName));}@Overridepublic T getNullableResult(ResultSet rs, int columnIndex) throws SQLException {return (T) JSON.parse(rs.getString(columnIndex));}@Overridepublic T getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {return (T) JSON.parse(cs.getString(columnIndex));}
}

定义实体DO的时候,指定:

@TableField(typeHandler = PGJsonbTypeHandler.class) // 用于 PostgreSQL 的 JSONB 类型

比如:

    @TableField(typeHandler = PGJsonbTypeHandler.class) // 用于 PostgreSQL 的 JSONB 类型private ShipToAddr shipToAddr;

http://www.lryc.cn/news/480583.html

相关文章:

  • Redis 权限控制(ACL)|ACL 命令详解、ACL 持久化
  • 内网学习一:windows基础
  • 编译工具与文件学习(一)-YAML、repos、vcstoolcolcon
  • 使用 HuggingFace 提供的 Elasticsearch 托管交叉编码器进行重新排名
  • CKA认证 | Day1 k8s核心概念与集群搭建
  • [极客大挑战 2019]PHP 1
  • 【c++丨STL】vector模拟实现
  • SQLAlchemy 介绍与实践
  • docker进行SRS直播服务器搭建
  • windows server2019下载docker拉取redis等镜像并运行项目
  • 数据结构(8.7_2)——败者树
  • 设计模式-七个基本原则之一-里氏替换原则
  • k8s中基于overlay网络和underlay网络的网络插件分别有哪些
  • 一文详解java的数据类型
  • Flink API 的层次结构
  • lua入门教程:math
  • ROS2简介与Ubuntu24.04中安装指南
  • 命令行工具PowerShell使用体验
  • MongoDB 详解:深入理解与探索
  • 使用 Elasticsearch 构建食谱搜索(一)
  • sealos部署K8s,安装docker时master节点突然NotReady
  • 使用vite+react+ts+Ant Design开发后台管理项目(五)
  • Spring Boot实现多数据源连接和切换
  • 发布 VectorTraits v3.0(支持 X86架构的Avx512系列指令集,支持 Wasm架构及PackedSimd指令集等)
  • 详解如何创建SpringBoot项目
  • IT架构管理
  • Feign入门实践
  • Leetcode 买卖股票的最佳时机 Ⅱ
  • 书生大模型实战营-玩转HF/魔搭社区闯关任务
  • 混响(Reverb):原理、应用与发展趋势的深度解析