【PostGIS】在Java中操作postgis——使用springboot+Maven+mybatis框架

前言:
PostgreSQL15+对应PostGIS安装教程及空间数据可视化
空间数据库-常用空间函数

完成PostGIS的安装与配置后,让我们来写一个Java操作postgis数据库的demo吧~

使用工具:

  1. Navicat
  2. IDEA

一、PostGIS数据库准备

  1. 在Navicat中新建一个postgreSQL的连接,并新建一个名为"postdemo"的数据库:
    在这里插入图片描述 在这里插入图片描述
  2. 在数据库中创建postgis扩展,并创建 bou2_4p 表(执行以下sql语句):
-- 创建postgis扩展
CREATE EXTENSION postgis;-- 创建表 bou2_4p
CREATE TABLE bou2_4p (gid SERIAL PRIMARY KEY,area float8,perimeter float8,bou2_4m_ float8,bou2_4m_id float8,adcode93 INT,adcode99 INT,name VARCHAR(20),geom geometry(MultiPolygon, 4326)
);
INSERT INTO bou2_4p (area, perimeter, bou2_4m_, bou2_4m_id, adcode93, adcode99, name, geom) VALUES (0.0, 0.018, 923.0, 3109.0, 810000, 810000, '香港特别行政区', ST_GeomFromText('MULTIPOLYGON(((114.286201477051 22.1847763061523,114.28434753418 22.1850299835205,114.284927368164 22.187816619873,114.287582397461 22.1907157897949,114.290313720703 22.1892375946045,114.287910461426 22.1863689422607,114.286201477051 22.1847763061523)))', 4326));
INSERT INTO bou2_4p (area, perimeter, bou2_4m_, bou2_4m_id, adcode93, adcode99, name, geom) VALUES (0.0, 0.014, 924.0, 3112.0, 810000, 810000, '香港特别行政区', ST_GeomFromText('MULTIPOLYGON(((114.303497314453 22.1849155426025,114.304130554199 22.1863536834717,114.305946350098 22.1868076324463,114.308296203613 22.1860828399658,114.308296203613 22.1850547790527,114.307823181152 22.1833896636963,114.305519104004 22.1828384399414,114.304168701172 22.1835269927979,114.303497314453 22.1849155426025)))', 4326));

二、构建项目

  1. 在IDEA中创建一个Maven项目,并在pom.xml文件中引入相关依赖:
<dependencies><!-- Mybatis核心 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version></dependency><!-- junit测试 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!-- pg驱动 --><dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>42.3.8</version></dependency><!-- postgis --><dependency><groupId>net.postgis</groupId><artifactId>postgis-jdbc</artifactId><version>2.5.0</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version></dependency><!--slf4j依赖--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.32</version></dependency><!-- logback 依赖 --><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version></dependency></dependencies>
  1. mybatis全局配置xml文件(其中数据库的名字,用户名和密码,以及SQL映射文件路径改成自己的):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--声明使用的环境 default是引用环境的id,表示当前所使用的环境 --><environments default="default"><environment id="default"><!--使用原生JDBC事务  --><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><property name="driver" value="org.postgresql.Driver"/><property name="url" value="jdbc:postgresql://localhost:5432/postdemo"/><property name="username" value="postgres"/><property name="password" value="123456"/></dataSource></environment></environments><mappers><mapper resource="com/postgis/demo/mapper/demoMapper.xml" /></mappers>
</configuration>
  1. 创建实体类 bou2_4p
package com.postgis.demo.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@AllArgsConstructor
@NoArgsConstructor
@Data
public class bou2_4p {private int gid;private double area;private double perimeter;private double bou2_4m_;private double bou2_4m_id;private int adcode93;private int adcode99;private String name;private String geom;
}
  1. 创建mapper接口,SQL映射文件:
package com.postgis.demo.mapper;import com.postgis.demo.pojo.bou2_4p;import java.util.List;public interface demoMapper {List<bou2_4p> selAll();
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.postgis.demo.mapper.demoMapper"><select id="selAll" resultType="com.postgis.demo.pojo.bou2_4p">select gid,area,perimeter,bou2_4m_,bou2_4m_id,adcode93,adcode99,name,ST_AsText(geom) as geom from bou2_4p</select>
</mapper>
  1. 创建测试类进行查询测试:
package com.postgis.demo.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.postgis.demo.pojo.bou2_4p;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;public class Test {public static void main(String[] args) throws IOException {Logger logger = LoggerFactory.getLogger(Test.class);InputStream is = Resources.getResourceAsStream("mybatis-config.xml");//使用工厂设计模式SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);//生产SqlSessionSqlSession  session=factory.openSession();logger.info("查询数据:");//方法名+包名List<bou2_4p> selectList = session.selectList("com.postgis.demo.mapper.demoMapper.selAll");for(bou2_4p u:selectList){System.out.println(u);}session.close();}
}
  1. 运行测试类,得到如下结果:
    在这里插入图片描述

  2. 下面是我的项目目录结构,作为参考:
    在这里插入图片描述

参考文档

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

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

相关文章

docker 镜像仓库harbor安装

1、windows安装&#xff1a; docker pull bitnami/harbor-registry 2、linux安装&#xff1a; K8s集群使用容器镜像仓库Harbor_k8s使用harbor-CSDN博客

Ubuntu系统如何安装SVN服务端并通过客户端无公网ip实现远程访问?

文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…

【Dart】P1 入口方法、注释方法、变量与常量、命名规则

Dart 入口方法、注释方法、变量与常量、命名规则 入口方法注释方法变量与常量变量变量名称命名规则常量 入口方法 入口方法一&#xff1a;main() 方法&#xff1b; 使用条件&#xff1a;有返回值&#xff1b; 代码示例&#xff1a; main() {print(nihao dart); }入口方法二&a…

LeetCode 22 括号生成

题目描述 括号生成 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;["((()))","(()())","(())()","()((…

测绘资质人员培训与岗位管理制度

人员培训与岗位管理制度 建立健全人员培训与岗位管理制度&#xff0c;明确岗位职责、岗前培训考核、继续教育等要求

设 备 管 理

(1) 简单叙述设备管理的任务和功能。 解&#xff1a; 设备管理的主要任务包括&#xff1a; 响应用户进程提出的I/O请求&#xff0c;选择和分配I/O设备进行数据传输操作。控制I/O设备和CPU(或内存)之间进行数据交换&#xff0c;提高设备和设备之间、CPU和设备之间以及进程和进程…

实验三:路由器的管理与配置

实验目的&#xff1a; 了解路由器的作用熟悉路由器的基本配置方法熟悉Packet Tracer 路由模拟软件的使用 实验环境&#xff1a; Windows 10 下的 Cisco Packet Tracer 实验内容&#xff1a; 熟悉Packet Tracer组件搭建实验拓扑 实验步骤&#xff1a; 1.连接设备 2.配置IP地…

开发常需要的好用API汇总

手机号码归属地&#xff1a;可根据手机号码查询其省市区、运营商区号行政区划代码等信息。 上亿条数据囊括最新的170、166、147等号段&#xff0c;更新及时、准确度高。二维码识别OCR&#xff1a;对图片中的二维码、条形码进行检测和识别&#xff0c;返回存储的文字内容。短信验…

【Linux】解释为什么“I/O 等待”的指标可能是误导的。

解释为什么“I/O 等待”的指标可能是误导的。 I/O等待指标是用来衡量I/O子系统性能的重要指标之一&#xff0c;它表示等待I/O操作完成的时间。然而&#xff0c;I/O等待指标有时可能会误导&#xff0c;原因如下&#xff1a; I/O操作类型&#xff1a;I/O等待指标不能告诉我们实…

python定义代码块的符号,python中代码块所属关系

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;python中代码块所属关系的语法&#xff0c;python定义代码块的符号&#xff0c;今天让我们一起来看看吧&#xff01; 本文章主要用于平时Python3学习和使用中积累的比较常用的代码块。代码都是经过验证可行的python简单…

深度学习计算数据集里所有图像像素点的均值方差

代码怕忘记&#xff0c;现在贴上来&#xff0c;以防丢失 from torch.utils.data import DataLoader from torchvision.datasets import ImageFolder import torch from torchvision import transformsdef get_mean_and_std(data_path, in_chans3):dataset ImageFolder(rootda…

RocketMQ常见问题分析

目录 1. RocketMQ如何保证消息不丢失 1.1 分析消息丢失场景 1.2 解决方案 1.2.1 保证消息生产不丢失 1.2.1.1 生产消息时不使用单向发送消息发送模式 1.2.1.2 生产者使用事务消息机制 1.2.2 保证消息存储不丢失 1.2.3 保证消息消费不丢失 1.2.4 RocketMQ特有的问题&…

4.8 【共享源】流的消费者

一,什么是流的消费者? 消费者从生产者那里获取内容,以进行下一步的处理。 消费者从生产者那里获取内容,并对其进行某种形式的处理(例如图像处理、合成)。它最终也可以显示来自生产者的内容。 通常,我们需要在消费者应用程序中执行接下来的步骤,以从生产者那里获取内…

Echarts legend属性使用

Echarts的legend属性是对图例组件的相关配置 而legend就是Echarts图表中对图形的解释部分&#xff1a; 其中legend自身常用的配置属性如下&#xff1a; orient 设置图例的朝向 属性值&#xff1a; vertical // 垂直显示 或者 horizontal // 水平显示 legend: {orient: ver…

Pandas有了平替Polars

Polars是一个Python数据处理库&#xff0c;旨在提供高性能、易用且功能丰富的数据操作和分析工具。它的设计灵感来自于Pandas&#xff0c;但在性能上更加出色。 Polars具有以下主要特点&#xff1a; 强大的数据操作功能&#xff1a;Polars提供了类似于Pandas的数据操作接口&am…

涵盖多种功能,龙讯旷腾Module第七期:超快动力学过程

Module是什么 在PWmat的基础功能上&#xff0c;我们针对用户的使用需求开发了一些顶层模块&#xff08;Module&#xff09;。这些Module中的一部分是与已有的优秀工具的接口&#xff0c;一部分是以PWmat的计算结果为基础得到实际需要的物理量&#xff0c;一部分则是为特定的计…

Zama TFHE-rs

1. 引言 前序博客见&#xff1a; 基于[Discretized] Torus的全同态加密指引&#xff08;1&#xff09;基于[Discretized] Torus的全同态加密指引&#xff08;2&#xff09;TFHE——基于[Discretized] Torus的全同态加密 代码解析 开源代码见&#xff1a; https://github.co…

ctf web赛道基础 万字笔记

一、SQL注入&#xff08;mysql&#xff09;&#xff1a; 基本语法 判断列数 order by 3 查询所有数据库&#xff1a; select group_concat(schema_name) from information_schema.schemata 查询当前数据库的所有表&#xff1a; select group_concat(table_name) from informa…

12.鸿蒙HarmonyOS App(JAVA) page的隐式跳转

跳转到指定Page的指定AbilitySlice MainAbilitySlice按钮触发事件&#xff1a; btn.setClickedListener(component -> { Intent _intent new Intent(); Operation operation new Intent.OperationBuilder() .withBundleName(…

关于Windows11画图板出现马赛克问题

参考博客链接: Win11新版画图板问题 一、问题描述 新版win11画图板使用橡皮擦&#xff0c;或者框选图片会出现这种马赛克的问题 二、问题解决 1.先点击 “层” 2.点击 “” 3.点击出现的这个层 现在就可以正常的使用画图板啦 如果想要取消右边的那一栏&#xff0c;…