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;
相关推荐
snow@li4 小时前
vue3+ts+vite:详细、完整的 tsconfig.json 示例 / 常见配置项及其用途
json·tsconfig.json
南郁6 小时前
007-nlohmann/json 项目应用-C++开源库108杰
c++·开源·json·nlohmann·现代c++·d2school·108杰
紫乾20147 小时前
idea json生成实体类
java·json·intellij-idea
yuren_xia8 小时前
Spring Boot + MyBatis 集成支付宝支付流程
spring boot·tomcat·mybatis
神仙别闹14 小时前
基于Java(SpringBoot、Mybatis、SpringMvc)+MySQL实现(Web)小二结账系统
java·spring boot·mybatis
crud15 小时前
Spring Boot 整合 MyBatis-Plus:从入门到精通,一文搞定高效持久层开发!
java·spring boot·mybatis
爱上语文15 小时前
MyBatisPlus(3):常用配置
java·后端·mybatis
xlsw_17 小时前
MyBatis之测试添加功能
java·开发语言·mybatis
clk66071 天前
SSM 框架核心知识详解(Spring + SpringMVC + MyBatis)
java·spring·mybatis
愿你天黑有灯下雨有伞1 天前
MyBatis-Plus LambdaQuery 高级用法:JSON 路径查询与条件拼接的全场景解析
mysql·json·mybatis