【学习笔记-myabtis】使用mybtis对接pgsql的postgis插件,获取地理字段Geometry信息

news2024/11/19 15:35:17

使用mybtis对接pgsql的postgis插件,获取地理字段geometry信息

参考资料:

Mybatis 自定义TypeHandler - 邓维-java - 博客园

1、如何使用typehandler

​ 相信大家用Mybatis这个框架至少一年以上了吧,有没有思考过这样一个问题:数据库有自己的数据类型,Java有自己的数据类型,那么Mybatis是如何把数据库中的类型和Java的数据类型对应的呢?本篇文章就来讲讲Mybatis中的 黑匣子TypeHandler(类型处理器) 。

顾名思义,类型处理器,将入参和结果转换为所需要的类型,Mybatis中对于内置了许多类型处理器,实际开发中已经足够使用了。

  • 要对接我们的地理字段geometry,就需要使用我们的typeHadnler

2、typehandler源码

类型处理器这个接口其实很简单,总共四个方法,一个方法将入参的Java类型的数 据转换为JDBC类型,三个方法将返回结果转换为Java类型。源码如下:

public interface TypeHandler<T> {
    //设置参数,java类型转换为jdbc类型
   void setParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException;
    //将查询的结果转换为java类型
    T getResult(ResultSet rs, String columnName) throws SQLException;
    T getResult(ResultSet rs, int columnIndex) throws SQLException;
    T getResult(CallableStatement cs, int columnIndex) throws SQLException;
}

3、配置信息如下

#mp配置
mybatis-plus:
  global-config:
    db-config:
      logic-delete-value: 1 #逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 #逻辑未删除值(默认为 0)
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #启动 mybatis 本身的 log 日志
    map-underscore-to-camel-case: true #启用驼峰命名
  mapper-locations: classpath*:/mapper/*.xml  #mapper扫描规则
  type-handlers-package: com.huicoo.mybatisPlus.typehandler #指定TypeHandler所在包的扫描规则
  • type-handlers-package,指定TypeHandler所在包的扫描规则,指定后mybatis会扫描对应路径下的typeHandler

4、 代码

代码的结构如下,一个抽象类作为postgis所有字段类型的父类

image-20230510162059801

抽象类如下

package com.huicoo.forestry.mybatis.typehandler;

/**
 * @Author zhuhuacong
 * @Date: 2023/05/10/ 11:21
 * @description
 */

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.postgis.Geometry;
import org.postgis.PGgeometry;

public abstract class GeometryTypeHandler<T extends Geometry> extends BaseTypeHandler<T> {
    public GeometryTypeHandler() {
    }

    public void setNonNullParameter(PreparedStatement preparedStatement, int i, T t, JdbcType jdbcType) throws SQLException {
        PGgeometry geometry = new PGgeometry();
        geometry.setGeometry(t);
        preparedStatement.setObject(i, geometry);
    }

    public T getNullableResult(ResultSet resultSet, String columnName) throws SQLException {
        PGgeometry pGgeometry = (PGgeometry)resultSet.getObject(columnName);
        return pGgeometry == null ? null : (T) pGgeometry.getGeometry();
    }

    public T getNullableResult(ResultSet resultSet, int columnIndex) throws SQLException {
        PGgeometry pGgeometry = (PGgeometry)resultSet.getObject(columnIndex);
        return pGgeometry == null ? null : (T) pGgeometry.getGeometry();
    }

    public T getNullableResult(CallableStatement callableStatement, int columnIndex) throws SQLException {
        PGgeometry pGgeometry = (PGgeometry)callableStatement.getObject(columnIndex);
        return pGgeometry == null ? null : (T) pGgeometry.getGeometry();
    }
}

geometry字段的子类如下

/**
 * @Author zhuhuacong
 * @Date: 2023/05/10/ 11:19
 * @description
 */
import org.apache.ibatis.type.MappedTypes;
import org.postgis.Geometry;

@MappedTypes({Geometry.class})
public class GeometryStringTypeHandler extends GeometryTypeHandler<Geometry> {
    public GeometryStringTypeHandler() {
    }
}

5、测试

成功获取到地理字段的数据参数,成功

image-20230512110322320

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/516898.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

xxl-job 是什么?

xxl-job 是什么&#xff1f; XXL-JOB 是一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。 设计思想 是将调度行为抽象形成 调度中心 平台&#xff0c;平台本身不承担业务逻辑&#xff0c;而是负责发起 调度请求 后&#xff0c;由 执…

右下角任务栏出现广告持续闪烁解决方法

&#x1f466;&#x1f466;一个帅气的boy&#xff0c;你可以叫我Love And Program &#x1f5b1; ⌨个人主页&#xff1a;Love And Program的个人主页 &#x1f496;&#x1f496;如果对你有帮助的话希望三连&#x1f4a8;&#x1f4a8;支持一下博主 右下角任务栏出现广告持…

【K8S】【Jenkins】【CI/CD】【一】交付CI/CD工具至k8s 【待写】

1 安装Harbor镜像仓库&#xff08;之前已部署 &#xff0c;略&#xff09; 可参考之前的《Kubernetes业务迁移.pdf》 网站-账号密码 http://gitlab.oldxu.net:30080/users/sign_in &#xff08; root/ admin12345 &#xff09; http://sonar.oldxu.net:30080/ …

Type-C显示器是什么,Type-C显示器的5大优势

在显示器领域内&#xff0c;USB Type-C接口还处于发展阶段&#xff0c;目前已经在新推出的一些高端显示器和旗舰显示器中有配置。USB Type-C接口的出现&#xff0c;将会形成以显示器为核心的桌面解决方案&#xff0c;用户可以把任何笔记本、手机、平板等等的画面转移到一台大屏…

使用sklearn,报错Library not loaded: @rpath/libgfortran.3.dylib

因为需要使用sklearn&#xff0c;去做一些数据分析&#xff0c;所以使用conda命令进行安装 conda install scikit-learn 在安装完成之后&#xff0c;导入&#xff0c;并使用拟合优度R2函数评估&#xff0c;发生如下报错&#xff1b; import sklearn as sk r2 sk.metrics.r2_sc…

怎么安全快速地创建Windows7文件差异备份任务?

​什么是差异备份&#xff1f; 差异备份是什么呢&#xff1f;简单来说&#xff0c;差异备份就是一种数据备份类型&#xff0c;它会帮助我们备份自上次完整备份以来已更改的全部文件。 举个例子&#xff0c;假如我们在星期一进行了一次完整备份&#xff0c;那么星…

有数·智享未来 | 新华三重磅发布绿洲平台3.0

5月10日&#xff0c;紫光股份旗下新华三集团以“有数智享未来”为主题&#xff0c;成功举办绿洲平台3.0新品发布会。全新一代绿洲平台实现内核进阶&#xff0c;以五大技术能力升级、五大行业方案沉淀、六类服务能力保障&#xff0c;三位一体构筑更领先的用数底座、更落地的用数…

ASEMI代理LT8471IFE#PBF原装ADI车规级LT8471IFE#PBF

编辑&#xff1a;ll ASEMI代理LT8471IFE#PBF原装ADI车规级LT8471IFE#PBF 型号&#xff1a;LT8471IFE#PBF 品牌&#xff1a;ADI/亚德诺 封装&#xff1a;TSSOP-20 批号&#xff1a;2023 引脚数量&#xff1a;20 工作温度&#xff1a;-40C~125C 安装类型&#xff1a;表面…

Protobuf:一种轻量级、高效的数据交换格式,附Java与Python数据交换示例

目录 下载安装Protobuf定义数据格式Java代码序列化Python反序列化 Protobuf&#xff08;Protocol Buffers&#xff09;是由 Google 开发的一种轻量级、高效的数据交换格式 官方文档&#xff1a;https://protobuf.dev/overview/GitHub&#xff1a;https://github.com/protocolb…

佩戴舒适的蓝牙耳机有哪些?蓝牙耳机佩戴舒适度排名

随着技术的成熟&#xff0c;真无线耳机这个市场竞争也越来越激烈&#xff0c;伴随着TWS真无线耳机快速发展&#xff0c;许多耳机品牌凭借着优质的产品抓住了时代机遇&#xff0c;各家无论是手机厂商还是耳机品牌争相布局真无线耳机市场&#xff0c; 下面笔者整理了几款佩戴舒适…

Towards Open World Object Detection(OWOD)代码复现

参考上一篇博客detectron2-入门安装,然后进行以下操作&#xff1a; 1、首先在OWOD文件目录运行以下代码&#xff0c;完成内部构建 python -m pip install -e ./ 2、数据集准备 首先下载数据集Annotations和JPEGImages:下载链接&#xff0c;需要翻墙&#xff0c;下载方法可以…

苹果手机连接电脑没反应怎么办?都进来看一下!

案例&#xff1a;iPhone连接电脑没反应 【盆友们&#xff0c;想要上传照片到电脑上&#xff0c;但是苹果手机连接电脑没反应是咋回事&#xff1f;】 手机连接电脑没反应会影响到您与电脑之间的数据传输和文件管理。本文将为您介绍解决苹果手机连接电脑没反应问题的方法&#x…

RethinkDB成为Linux基金会的一员

导读日前&#xff0c;RethinkDB项目有了新的动态。Cloud Native Computing基金会&#xff08;CNCF&#xff09;宣布它购买了NoSQL分布式文件存储数据库RethinkDB的源代码版权&#xff0c;将授权协议从Affero GPLv3改为Apache v2&#xff0c;并将其捐赠给Linux基金会。 2016年1…

多媒体基础

第九章、多媒体基础 1、多媒体技术基本概念 1.1、音频相关概念 超声波的频率通常在20千赫兹以上&#xff0c;无法被人类的耳朵听到&#xff0c;常用于医疗诊断、非破坏性材料测试、清洗、测量等领域 次声波的频率通常在20赫兹以下&#xff0c;同样无法被人类的耳朵听到&…

失败 深度linux社区版 20.8 编译安装 nvidia-docker,启动Stable Deffision WebUI docker 容器

环境 说明&#xff1a; 深度apt 源中无法直接安装nvidia-docker 下载源码 github地址&#xff1a; GitHub - NVIDIA/nvidia-docker: Build and run Docker containers leveraging NVIDIA GPUs 下载最新release https://github.com/NVIDIA/nvidia-docker/archive/refs/tags/…

普通人如何抓住AI这个风口?

​ 要抓住AI这个风口&#xff0c;普通人可以从以下几个方面入手&#xff1a; 1. 学习AI相关知识&#xff1a;可以通过自学、参加培训班、参加线上课程等方式学习AI相关知识&#xff0c;掌握AI的基本原理和应用场景。 2. 参与AI开源社区&#xff1a;可以加入AI开源社区&#…

CVPR 2023 | 目标跟踪新框架:用自回归序列生成的方式训练模型读出目标

如果模型知道目标在哪&#xff0c;那么我们只需要教模型读出目标的位置&#xff0c;而不需要显式地进行分类、回归。对于这项工作&#xff0c;研究者们希望可以启发人们探索目标跟踪等视频任务的自回归式序列生成建模。 自回归式的序列生成模型在诸多自然语言处理任务中一直占…

【Midjourney】Midjourney 的 Prompt 指令类型 ( 画风指令 | 人物细节指令 | 灯光镜头指令 | 艺术家风格指令 )

文章目录 一、Midjourney 的 Prompt 详细指令规则二、Midjourney 的画风指令关键词1、超现实主义2、注重细节描写3、Artstation 画风4、数字绘画风格5、漫画风格6、线条艺术 三、Midjourney 的人物细节描写关键词1、面部特征描写2、身体描写3、生成示例 14、生成示例 2 四、Mid…

实在智能与浙江工商大学官宣战略合作,共建人工智能联合实验室和实习基地

5月10日&#xff0c;实在智能与浙江工商大学正式官宣战略合作&#xff0c;并进行“人工智能联合实验室” “大学生实习实践基地”揭牌仪式。躬身入局共筑人工智能人才生态&#xff0c;这是实在智能和浙江工商大学的共同愿景&#xff0c;也是校企双方深度产学研融合、加速科技型…

从10进制到1000进制:一场数字的盛宴

本篇博客会讲解力扣“1920. 基于排列构建数组”的解题思路&#xff0c;这是题目链接。 先来审下题&#xff1a; 以下是输出示例&#xff1a; 以下是提示&#xff1a; 相信读完题的你已经感到没啥意思了&#xff0c;感觉做这道题就是在浪费时间。但是还是建议你看下去&…