前言
postgresql数据库的geometry类型无法被mybatis识别,单独去写SQL函数看起来也有点蠢,刚好搜索到GIT上的项目mybatis-typehandlers-postgis,不需要再去造一遍轮子,里面的文档已经很清晰,这里主要讲用法。
用法
思路
利用mybatis提供的BaseTypeHandler提供的类型转换能力,结合postgis提供的数据类型,得到转换实现。
环境
本文使用mybatis-plus、postgis-jdbc,以点类型为例,具体搭建见上方项目文档,下面是主要的pom.xml
<!-- https://mvnrepository.com/artifact/org.postgis/postgis-jdbc -->
<dependency>
<groupId>org.postgis</groupId>
<artifactId>postgis-jdbc</artifactId>
<version>1.3.1</version>
</dependency>
<!-- mybatis-postgis -->
<dependency>
<groupId>com.eyougo</groupId>
<artifactId>mybatis-typehandlers-postgis</artifactId>
<version>1.0</version>
</dependency>
使用
实体类用Object指定类型,建议getter/setter方法增加日常使用的格式,如wkt,主要利用Point类型的构造函数可以直接使用WKT,其他方式见仁见智。
import java.sql.SQLException;
import org.postgis.Point;
public class Point {
private Object geom;
// 正常的getter/setter
// 自定义wktsetter
public void setGeom() throws SQLException {
this.geom = new PGgeometry(new Point(wkt));
}
// 自定义wktgetter
public String getGeomAsWkt() {
PGgeometry geomtry = (PGgeometry) geom;
if (geomtry == null) {
return null;
}
StringBuffer sb = new StringBuffer();
geomtry.getGeometry().outerWKT(sb);
return sb.toString();
}
}