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

需要加一个转换方法:

java 复制代码
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();

    @Override
    public 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);
        }
    }


    @Override
    public T getNullableResult(ResultSet rs, String columnName) throws SQLException {
        return (T) JSON.parse(rs.getString(columnName));
    }

    @Override
    public T getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        return (T) JSON.parse(rs.getString(columnIndex));
    }

    @Override
    public T getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        return (T) JSON.parse(cs.getString(columnIndex));
    }
}

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

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

比如:

java 复制代码
    @TableField(typeHandler = PGJsonbTypeHandler.class) // 用于 PostgreSQL 的 JSONB 类型
    private ShipToAddr shipToAddr;
相关推荐
nbsaas-boot7 小时前
探索 JSON 数据在关系型数据库中的应用:MySQL 与 SQL Server 的对比
数据库·mysql·json
cmdch20177 小时前
Mybatis加密解密查询操作(sql前),where要传入加密后的字段时遇到的问题
数据库·sql·mybatis
疯一样的码农9 小时前
Jackson 的@JsonRawValue
json
秋恬意10 小时前
什么是MyBatis
mybatis
CodeChampion10 小时前
60.基于SSM的个人网站的设计与实现(项目 + 论文)
java·vue.js·mysql·spring·elementui·node.js·mybatis
Web打印12 小时前
web打印插件 HttpPrinter 使用半年评测
javascript·json·firefox·jquery·html5
手心里的白日梦13 小时前
网络计算器的实现:TCP、守护进程、Json、序列化与反序列化
网络·tcp/ip·json
chenchihwen13 小时前
数据分析时的json to excel 转换的好用小工具
数据分析·json·excel
子燕若水15 小时前
简要解释JSON Schema
前端·html·json
Json_1817901448016 小时前
淘系商品评论json数据示例参考,API接口系列
大数据·json·api