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

news2024/11/18 15:45:28

前言:
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 configuration
        PUBLIC "-//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 mapper
        PUBLIC "-//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);
        //生产SqlSession
        SqlSession  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.coloradmin.cn/o/1338403.html

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

相关文章

前端Vue进阶

Vue进阶 当你熟悉了Vue.js的基本概念和用法后&#xff0c;可以继续深入学习Vue.js的进阶内容。以下是一些Vue.js的进阶主题&#xff0c;可以帮助你更好地理解和应用Vue.js。 组件通信 Vue.js提供了多种方式来实现组件之间的通信。除了父子组件之间的通信&#xff0c;还有兄弟…

python降低图像的空间分辨率——冈萨雷斯数字图像处理

原理&#xff1a; 降低图像的空间分辨率意味着减少图像中可见的细节&#xff0c;使图像变得模糊或粗糙。这可以通过减少图像的像素数量或改变像素的排列来实现。以下是一些降低图像空间分辨率的常见原理和方法&#xff1a; 下采样&#xff08;Subsampling&#xff09;&#xf…

多功能演示工具ProVideoPlayer2 mac特色介绍

ProVideoPlayer2 mac是用于大多数任何生产的首选多功能演示工具。ProVideoPlayer 2是一种动态视频播放和处理媒体服务器&#xff0c;可将视频映射&#xff08;包括播放和实时视频输入&#xff09;实时控制到一个或多个输出。包括实时效果&#xff0c;调度&#xff0c;网络同步和…

Spring中常见的Bean后处理器

Bean后处理器的作用&#xff1a;为Bean生命周期各个阶段提供扩展。接下来我们查看一个案例 public class TestBeanPostProcessor {public static void main(String[] args) {//该容器不存在任何Spring中的bean对象&#xff0c;是一个干净的容器&#xff0c;且提供了正常容器中…

<JavaEE> 协议格式 -- 传输层协议 TCP

目录 一、TCP协议格式长啥样&#xff1f; 二、TCP协议属性解释 1&#xff09;源端口号/目的端口号 2&#xff09;序号/确认序号 3&#xff09;TCP报头长度 4&#xff09;保留位 5&#xff09;标志位 6&#xff09;窗口大小 7&#xff09;校验和 8&#xff09;紧急指针…

Oracle查询重复数据取第二行,好用来删除重复数据

Oracle查询重复数据取第二行&#xff0c;好用来删除重复数据 SELECT * FROM ( SELECT e.* , ROW_NUMBER() over(PARTITION BY product_category_id,model_size_id ORDER BY product_category_id,model_size_id) rn FROM equ_check_rules e ) s WHERE rn 2;

OSPF单区域配置-新版(11)

目录 整体拓扑 操作步骤 1.基本配置 1.1 配置R1的IP 1.2 配置R2的IP 1.3 配置R3的IP 1.4 配置PC-1的IP地址 1.5 配置PC-2的IP地址 1.6 配置PC-3的IP地址 1.7 检测R1直连链路连通性 1.8 检测R3直连链路连通性 1.9 检测R2直连链路连通性 2. 部署单区域OSPF网络 2.1…

php 不加后缀访问

实现不带后缀访问php文件的方法&#xff1a;首先在htaccess文件中加入内容“RewriteRule ^(api/token) token.php [L]”&#xff1b;然后通过根目录下的“token.php”来接受“api/token”&#xff1b;最后修改配置文件。 考虑的做法有&#xff1a; HTTP重写技术&#xff0c;让…

初探大模型微调

目标&#xff1a;低成本微调大模型&#xff0c;拥有属于自己的AI助手。 一切的一切&#xff0c;都得益于LoRA、QLoRA微调方法&#xff0c;没有A100一样可以微调大模型&#xff08;用3090 24G显存微调70亿参数的baichuan绰绰有余&#xff0c;甚至参数量小一点的模型3060也能跑&a…

基于电商场景的高并发RocketMQ实战-Broker写入读取流程性能优化总结、Broker基于Pull模式的主从复制原理

&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308; 【11来了】文章导读地址&#xff1a;点击查看文章导读&#xff01; &#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f3…

Windows实现MySQL5.7主从复制(详细版)

使用免安装版本&#xff08;官网下载地址&#xff09; 在Windows上安装两种MySQL服务并同时开启服务 1.下载配置 打开解压文件所在位置&#xff0c;就新建一个配置文件my.ini。 2.主库安装 主库的my.ini配置文件如下&#xff1a; [mysqld] #设置主库端口&#xff0c;注意须是…

UDP信号多个电脑的信息传输测试、配置指南

最近要做一个东西&#xff0c;关于一个软件上得到的信号&#xff0c;如何通过连接的局域网&#xff0c;将数据传输出去。我没做过相关的东西&#xff0c;但是我想应该和软件连接数据库的过程大致是差不多的&#xff0c;就一个ip和一个端口号啥的。 一.问题思路 多个设备同时连…

释放创造力的终极工具——Adobe Photoshop 2022 Mac/win

作为全球最受欢迎的图像处理软件&#xff0c;Adobe Photoshop一直是专业设计师和摄影师的首选工具。而最新推出的Adobe Photoshop 2022更是在功能和性能上迈出了重要的一步&#xff0c;为用户提供了更强大、更便捷的创作体验。 首先&#xff0c;Adobe Photoshop 2022引入了许多…

html table可编辑表格数据实现删除

这里教大家使用纯html和js脚本结合实现删除表格数据 <!DOCTYPE html> <html> <head><style>table {border-collapse: collapse;width: 100%;}th, td {border: 1px solid black;padding: 8px;text-align: left;}</style> </head> <body…

5G阅信应用场景有哪些?

5G阅信的应用场景非常广泛&#xff0c;以下是一些常见的应用场景&#xff1a; 1.工业自动化&#xff1a;5G阅信可以连接各种工业设备和传感器&#xff0c;实现设备之间的实时通信和控制&#xff0c;提高生产效率和自动化水平。 2.物联网和智能家居&#xff1a;5G阅信可以连接各…

【每日一题】LeetCode206.反转链表

个人主页&#xff1a;白日依山璟 专栏&#xff1a;Java|数据结构与算法|每日一题 文章目录 1. 题目描述示例1示例2示例3提示 2. 思路3.代码 1. 题目描述 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例1 输入&#xff1a;head [1…

文件夹改名方法:文件夹随机重命名的实用技巧,轻松管理

在日常生活和工作中&#xff0c;会遇到大量的文件夹要处理和管理。方便查找或分类&#xff0c;要对文件夹进行重命名。如果手动一个个重命名不仅耗时&#xff0c;还容易出错。现在一起来看看云炫文件管理器如何批量随机重命名文件夹&#xff0c;掌握这些技巧能更加轻松地应对工…

idea自动注释

前言 保存一下自己的自动注释代码 idea自动注释 前言1 创建类时&#xff0c;自动生成注释2 在方法上使用快捷键生成注释3 使用方法4 效果图 1 创建类时&#xff0c;自动生成注释 如下&#xff1a; #if (${PACKAGE_NAME} && ${PACKAGE_NAME} ! "")package …

SParC数据集介绍

导语 SParC是Text-to-SQL领域的一个多轮查询数据集。本篇博客将对该数据集论文和数据格式进行简要介绍。 SParC数据集概述 SParC是一个跨领域的多轮Text-to-SQL数据集。它包含有4298个问题轮次&#xff0c;大约有12k的自然语言问句到SQL标注的Question-SQL对。这些问题来自于…

【Python终端报错】“python.exe: can‘t open file”【及解决方法】

一、问题描述 如下图&#xff0c;在PyCharm中使用自带的Python终端运行源代码文件时&#xff0c;提示出错&#xff1a; D:\Program Files\Python3.10.0\python.exe: can’t open file ‘D:\Desktop\Python Security Chapter 4\Whois’: [Errno 2] No such file or directory 翻…