Springboot + Mybatis 操作 PostgreSQl 中的Jsonp类型

tech2022-11-27  86

Springboot + Mybatis 操作 PostgreSQl 中的Jsonp类型

在网上翻了好多资料,刚开始试网上的方法的是有一个 PGobject类始终 引用不到。这个时候需要更改pom文件

注释掉下面那一行刷新maven就可以找到了。

<dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <!-- <scope>runtime</scope>--> </dependency>

新增typeHandler

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; /** * @Author: naine * @Description: * @Date: 5:21 下午 2020/9/2 */ @MappedTypes(Object.class) public class JsonTypeHandler extends BaseTypeHandler<Object> { //引入PGSQL提供的工具类PGobject private static final PGobject jsonObject = new PGobject(); //注册类型,绑定值 @Override public void setNonNullParameter(PreparedStatement preparedStatement, int i, Object o, JdbcType jdbcType) throws SQLException { jsonObject.setType("json"); jsonObject.setValue(o.toString()); preparedStatement.setObject(i, jsonObject); } @Override public Object getNullableResult(ResultSet resultSet, String s) throws SQLException { return resultSet.getString(s); } @Override public Object getNullableResult(ResultSet resultSet, int i) throws SQLException { return resultSet.getString(i); } @Override public Object getNullableResult(CallableStatement callableStatement, int i) throws SQLException { return callableStatement.getString(i); } }

需要在Mybatis的Mapper中加入typeHandler="com.naine.demo.config.JsonTypeHandler"

在这里我domain层里映射的Java类型是Object

<resultMap id="BaseResultMap"> <result column="key_results" jdbcType="OTHER" property="keyResults" typeHandler="com.naine.demo.config.JsonTypeHandler"/> </resultMap>

在添加和修改的SQL上加入 这样就可以使用了 不然就会报错

#{keyResults,jdbcType=OTHER, typeHandler=com.naine.demo.config.JsonTypeHandler},
最新回复(0)