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
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章