mybatis几何geometry类型转换

本文介绍了如何在mybatis中处理postgresql的geometry类型字段。提供了两种方法:1) 直接将WKT(Well-Known Text)字符串接收并转换;2) 使用mybatis的自定义类型转换,在写入实体时统一转换。详细讲述了自定义类型转换器的实现,并给出了相关代码示例,包括抽象的GeometryTypeHandler、具体类型的转换器如LineStringTypeHandler和PointTypeHandler,以及转换工具类JtsUtils的使用。同时,强调了xml配置中需要指定自定义转换器来确保数据的正确读写。
摘要由CSDN通过智能技术生成

示例:github地址

利用mybatis从postgresql中读取geometry类型字段到实体类中,可以多种接受方式:

1. 直接利用String去接受wkt
2. 利用mybatis在写入实体类时将wkt转换为geometry类型

第一种方式:非常简单粗暴,不过在代码中需要用到geometry类型时,都会写上如下代码:

try {
   
	......
	JtsUtils.createLineStringByWKT(wkt)
	......
} catch (ParseException) {
   
	e.printStackTrace();
}

如果代码中存在较多的地方用到几何运算相关的内容,这个在出现很多次。个人认为没有太大必要如此繁琐。当然几何运用的地方较少就当我没有说,直接跳过本文余下内容。

第二种方式:利用mybatis的自定义类型转换的功能,在写入实体时进行统一转换,同时在实体转换为数据库类型是将geometry类型转换为wkt字符串。
废话不多说,直接上代码:

AbstractGeometryTypeHandler.java 几何转换的父类

package com.threestone.common.mybatisTypeHandler;

import com.threestone.utils.JtsUtils;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.io.WKTReader;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;

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

/**
 * 字符串转为JTS对应的几何类型
 * Created by Friday on 2019/6/19.
 */
@MappedJdbcTypes({
   JdbcType.OTHER})
public abstract class AbstractGeometryTypeHandler<T extends Geometry> extends BaseTypeHandler<T> {
   
    /**
     * 把Java类型参数转换为对应的数据库类型
     *
     * @param ps        当前的PreparedStatement对象
     * @param i         当前参数位置
     * @param parameter 当前参数的Java对象
     * @param jdbcType  当前参数的数据库类型
     * @throws SQLException
     */
    public void setNonNullParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException {
   
        String wkt = JtsUtils.toEwkt(parameter);
        ps.setObject(i, wkt);
    }

    /**
     * 获取数据结果集时把数据库类型转换为对应的Java类型
     *
     * @param rs         当前的结果集
     * @param columnName 当前的字段名称
     * @return 转换后的Java对象
     * @throws SQLException
     */
    public T getNullableResult(ResultSet rs, String columnName) throws SQLException {
   
        String wkt = (String) rs.getObject(columnName);
        return (T) getGeometryFromWkt(wkt);
    }

    /**
     * 通过字段位置获取字段数据时把数据库类型转换为对应的Java类型
     *
     * @param rs          当前的结果集
     * @param columnIndex 当前字段的位置
     * @return 转换后的Java对象
     * @throws SQLException
     */
    public T 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值