mybatis 自定义TypeHandler映射Geometry空间几何数据 PGPoint (java +mybatis+ pgsql)

Posted Hepburn Yang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis 自定义TypeHandler映射Geometry空间几何数据 PGPoint (java +mybatis+ pgsql)相关的知识,希望对你有一定的参考价值。

报错信息

Type handler was null on parameter mapping for property ‘coordinates’。It was either not specified and/or could not be found for the javaType (org.postgresql.geometric.PGpoint) : jdbcType (null) combination.

项目技术栈:

springboot+mybatis+pgsql

需求:

将Java实体类中的空间几何类型数据(点,线,多边形,多面体)与pgsql中的point,line 等类型做一个关系映射,针对一般的数据类型mybatis已经为我们做好这件事了,比如我们再Java中定义的String类型你不用关系是如何映射到mysql中的char类型的,但是mybatis没有做空间几何数据类型的映射处理,所以我需要自定义一个类型处理器TypeHandler来做这一层映射。

网上查了大多是对json类型的映射,也有很多按自定义数据格式经typehandler处理之后再存库的,思路都是差不多的,我比葫芦画瓢写了一个针对坐标 Point类型数据处理的,经验证是可行的,给大家一些参考;

自定义TypeHandler

package io.closed.common.handler;

import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.Point;
import org.locationtech.jts.io.WKTReader;
import org.postgresql.geometric.PGpoint;
import org.postgresql.util.PGobject;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 自定义类型转换器映射空间几何数据
 * @author yangxiaohui
 * @date 2019-11-1 14:28:56
 */
@Slf4j
@MappedTypes(value = PGpoint.class)
public class GeometryTypeHandler extends BaseTypeHandler<PGpoint> 

    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, PGpoint pGpoint, JdbcType jdbcType) throws SQLException 
        pGpoint.setType("point");
        preparedStatement.setObject(i,pGpoint);

    

    @Override
    public PGpoint getNullableResult(ResultSet resultSet, String s) throws SQLException 
        return (PGpoint) resultSet.getObject(s);
    

    @Override
    public PGpoint getNullableResult(ResultSet resultSet, int i) throws SQLException 
        return (PGpoint) resultSet.getObject(i);
    

    @Override
    public PGpoint getNullableResult(CallableStatement callableStatement, int i) throws SQLException 
        return (PGpoint) callableStatement.getObject(i);
    


mybatis配置

把包地址配上 :在configuration中配置type-handlers-package属性

 type-handlers-package: io.closed.common.handler

重点关注我标蓝色的即可

Mapper.xml文件

在需要映射的字段上加上自定义typehandler

以上是关于mybatis 自定义TypeHandler映射Geometry空间几何数据 PGPoint (java +mybatis+ pgsql)的主要内容,如果未能解决你的问题,请参考以下文章

mybatis中typeHandler自定义实现json的读写

MyBatis使用自定义TypeHandler转换类型

使用mybatis中的自定义TypeHandler处理PostgreSQL中的Json类型字段

MyBatis使用自定义TypeHandler转换类型

MyBatis使用自定义TypeHandler转换类型的实现方法

mybatis的typeHandler