mybatis連接PGSQL中對于json和jsonb的處理方法
pgsql數(shù)據(jù)庫表字段設(shè)置了jsonb格式;在java的實體里使用String或者對象轉(zhuǎn)換會一直提示一個錯誤:
Caused by: org.postgresql.util.PSQLException: ERROR: column "xx" is of type jsonb but expression is of type character varying
需要加一個轉(zhuǎn)換方法:
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類型之間的轉(zhuǎn)換
* 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 類型
比如:
@TableField(typeHandler = PGJsonbTypeHandler.class) // 用于 PostgreSQL 的 JSONB 類型
private ShipToAddr shipToAddr;到此這篇關(guān)于mybatis連接PGSQL中對于json和jsonb的處理的文章就介紹到這了,更多相關(guān)mybatis PGSQL json和jsonb處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringMVC JSON數(shù)據(jù)交互實現(xiàn)過程解析
這篇文章主要介紹了SpringMVC JSON數(shù)據(jù)交互實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-10-10
java生成csv文件亂碼的解決方法示例 java導出csv亂碼
這篇文章主要介紹了java生成csv文件亂碼的解決方法,大家可以直接看下面的示例2014-01-01
maven如何利用springboot的配置文件進行多個環(huán)境的打包
這篇文章主要介紹了maven如何利用springboot的配置文件進行多個環(huán)境的打包,在Spring Boot中多環(huán)境配置文件名需要滿足application-{profiles.active}.properties的格式,其中{profiles.active}對應(yīng)你的環(huán)境標識,本文給大家詳細講解,需要的朋友可以參考下2023-02-02

