阅读 222

Mybatis-plus通过TypeHandler实现wkt字符串类型和数据库GEOMETRY类型自动转换

步骤一:导入依赖

<dependency>     <groupId>com.baomidou</groupId>     <artifactId>mybatis-plus-boot-starter</artifactId>     <version>3.5.2</version> </dependency> <dependency>     <groupId>net.postgis</groupId>     <artifactId>postgis-jdbc</artifactId>     <version>2021.1.0</version> </dependency> 复制代码

步骤二:创建handle类

import cn.hutool.core.util.ObjectUtil; import net.postgis.jdbc.PGgeometry; import org.apache.ibatis.type.JdbcType; import org.apache.ibatis.type.TypeHandler; import org.springframework.stereotype.Component; import java.sql.CallableStatement; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Optional; @Component public class WKTGeoJsonTypeHandler implements TypeHandler<Object> {     /**      * 设置参数(用于类型转换操作)      * @param preparedStatement       * @param i      * @param o      * @param jdbcType      * @throws SQLException      */     @Override     public void setParameter(PreparedStatement preparedStatement, int i, Object o, JdbcType jdbcType) throws SQLException {         //将wkt类型字符串转换为postgis类型PGgeometry用来实现自动入库         //注意 wkt的类型必须为大写 类如(point 必须为:POINT)         if(ObjectUtil.isNotNull(o)){             String wkt=o.toString();             PGgeometry pGgeometry =new PGgeometry(wkt);             preparedStatement.setObject(i,pGgeometry);         }     }     /**      * 将结果转为wkt格式      * @param resultSet       * @param columnName      * @return      * @throws SQLException      */     @Override     public Object getResult(ResultSet resultSet, String columnName) throws SQLException {         Object object = Optional.ofNullable(resultSet.getObject(columnName)).orElseGet(Object::new);         if (object instanceof PGgeometry){             return ((PGgeometry)object).getValue();         }         return object;     }     @Override     public Object getResult(ResultSet resultSet, int i) throws SQLException {         return null;     }     @Override     public Object getResult(CallableStatement callableStatement, int i) throws SQLException {         return null;     } } 复制代码

步骤三:对字段设置该handle

@Data @TableName(value = "address") @Builder public class Address implements Serializable {     @TableId(value = "uuid", type = IdType.INPUT)     private String uuid;     @TableField(value = "adderss")     private String adderss;     @TableField(value = "geom",typeHandler = WKTGeoJsonTypeHandler.class)     private Object geom; } 复制代码

image.png

步骤四:测试

@Test void select() throws Exception {     List<Address> list = addressService.list();     list.forEach(s-> System.out.println(s.toString())); } @Test public void add() throws SQLException {     Address test = Address.builder().uuid("1111112").adderss("test").geom("POINT(0 0)").build();     addressService.save(test); } 复制代码

注意:service mapper 通过插件自动生成

其他:XML写法

image.png

以上就完成了postgis数据自动入库和查询,是不是很秀,该块去尝试吧!!!

image.png


作者:一瓶子不满半瓶子晃荡
链接:https://juejin.cn/post/7168760625190371364
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐