springboot整合pgsql

demo代码说明

springboot使用mybatis-plus整合pgsql

在springboot项目中使用pgsql,使用了mybatis-plus、druid

代码见 spring-demo: springboot 结合各种插件 demo

注意事项:

版本兼容

正常springboot使用,但是注意需要添加pgsql正确版本[maven pgsql高版本向下兼容],

比如pgsql时14,那么需要对应maven中42.5版本,可以查看pgsql对jdbc的官网Home | pgJDBC

pgsqlmaven-pgsql
14.x42.5
13.x42.4
12.x42.2.24
11.x42.2.20

类型转换【自定义方式】

pgsql特殊类型,比如location与java数据类型的相互转换问题

在java项目中进行转换,一般按照三步:

1.定义转换规则,及pgsql中的类型如何转换到java中

public class LocationTypeHandler extends BaseTypeHandler<double[]> {@Overridepublic void setNonNullParameter(PreparedStatement ps, int i, double[] parameter, JdbcType jdbcType) throws SQLException {if (parameter != null && parameter.length == 2) {ps.setObject(i, "(" + parameter[0] + "," + parameter[1] + ")", Types.OTHER);} else {ps.setNull(i, Types.OTHER);}}@Overridepublic double[] getNullableResult(ResultSet rs, String columnName) throws SQLException {String point = rs.getString(columnName);if (point == null) {return null;}point = point.replace("(", "").replace(")", "");String[] split = point.split(",");return new double[]{Double.parseDouble(split[0]), Double.parseDouble(split[1])};}@Overridepublic double[] getNullableResult(ResultSet rs, int columnIndex) throws SQLException {String point = rs.getString(columnIndex);if (point == null) {return null;}point = point.replace("(", "").replace(")", "");String[] split = point.split(",");return new double[]{Double.parseDouble(split[0]), Double.parseDouble(split[1])};}@Overridepublic double[] getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {String point = cs.getString(columnIndex);if (point == null) {return null;}point = point.replace("(", "").replace(")", "");String[] split = point.split(",");return new double[]{Double.parseDouble(split[0]), Double.parseDouble(split[1])};}
}
2.注册自定义转换规则
@Configuration
public class MyBatisConfig {@Beanpublic SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();sessionFactory.setDataSource(dataSource);// 获取类型处理器注册器TypeHandlerRegistry typeHandlerRegistry = sessionFactory.getObject().getConfiguration().getTypeHandlerRegistry();// 注册自定义类型处理器typeHandlerRegistry.register(double[].class, JdbcType.OTHER, LocationTypeHandler.class);return sessionFactory.getObject();}
}
3.使用
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("city")
public class City {private Integer id;private String name;@TableField(typeHandler = LocationTypeHandler.class)private double[] location;
}

这样可以正常相互转换

double[] location = new double[] {1,4};testService.addCity(new City(4,"nj",location));

类型转化【使用pgsql定义】

  1. 几何数据类型

    • box: 使用 org.postgresql.geometric.PGbox 对象
    • circle: 使用 org.postgresql.geometric.PGcircle 对象
    • line: 使用 org.postgresql.geometric.PGline 对象
    • lseg: 使用 org.postgresql.geometric.PGlseg 对象
    • path: 使用 org.postgresql.geometric.PGpath 对象
    • point: 使用 org.postgresql.geometric.PGpoint 对象
    • polygon: 使用 org.postgresql.geometric.PGpolygon 对象
  2. 其他数据类型

    • inet: 使用 java.net.InetAddressorg.postgresql.util.PGobject 对象
    • macaddr: 使用 org.postgresql.util.PGobject 对象
    • json: 使用 org.postgresql.util.PGobject 对象,或者直接使用 String
    • jsonb: 使用 org.postgresql.util.PGobject 对象,或者直接使用 String
    • uuid: 使用 java.util.UUID
    • tsvector: 使用 org.postgresql.util.PGobject 对象

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

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

相关文章

CVE-2024-39700 (CVSS 9.9):JupyterLab 模板中存在严重漏洞

在广泛使用的 JupyterLab 扩展模板中发现了一个严重漏洞&#xff0c;编号为CVE-2024-39700 。此漏洞可能使攻击者能够在受影响的系统上远程执行代码&#xff0c;从而可能导致大范围入侵和数据泄露。 该漏洞源于在扩展创建过程中选择“测试”选项时自动生成“update-integratio…

VIM基础配置

1. CTAGS配置 下载 上传虚拟机&#xff0c;解压&#xff0c;进入目录 tar -xzvf ctags-5.8.tar.gz cd ctags-5.8/编译 ./configure sudo make sudo make install查看是否安装成功 ctags --version打印如下 2. 使用Vundle 下载 git clone https://github.com/VundleVim/Vund…

Linux并发程序设计(3):守护进程

目录 前言 一、介绍 1.1 概念 1.2 特点 1.3 举例 二、系统编程 2.1 setsid函数 2.2 getpid函数 2.3 getsid函数 2.4 getpgid函数 2.5 chdir函数 三、代码例程 3.1 使子进程在后台运行 3.2 使子进程脱离原终端 3.3 更换目录&#xff0c;并设定权限&#xff08;非…

React--Redux

Redux 是一个用于 JavaScript 应用的状态管理库&#xff0c;特别是在 React 应用中非常流行。下面我将详细介绍一个使用 Redux 的简单案例&#xff0c;包括设置 Redux 环境、创建 store、定义 actions 和 reducers&#xff0c;以及如何连接 React 组件。 步骤 1: 安装依赖 首…

基于STM32通过云平台实现智慧大棚【手机远程查看温湿度】【报警】

文章目录 一、成果演示二、所用到的模块三、实现的功能四、接线说明五、WIFI模块配置步骤5.1云平台介绍5.2云平台使用5.3使用USB转TTL测试联通云平台 六、STM32代码编写七、手机上查看数据6.1下载软件&#xff08;仅限安卓手机&#xff09;6.2操作 一、成果演示 STM32通过物联网…

String、StringBuffer和StringBuilder

一、String类 1. String类的理解 2. String类结构 1. String类实现了Serializable接口,说明String对象可以串行化,即可以在网络上传输 2. String类实现了Comparable接口,说明String对象可以比较 String底层是一个字符数组,这个数组里存的是字符串的内容 例如:…

005 仿muduo实现高性能服务器组件_通信连接管理

​&#x1f308;个人主页&#xff1a;Fan_558 &#x1f525; 系列专栏&#xff1a;仿muduo &#x1f4d2;代码仓库&#xff1a; 项目代码 &#x1f339;关注我&#x1f4aa;&#x1f3fb;带你学更多知识 文章目录 前言Channel模块设计原因整体设计代码如下 Connection模块设计原…

Florence2:Advancing a unified representation for a variety of vision tasks

Florence-2模型:开启统一视觉基础模型的新篇章_florence -2-CSDN博客文章浏览阅读1.1k次,点赞108次,收藏109次。Florence-2是由微软Azure AI团队开发的一款多功能、统一的视觉模型。它通过统一的提示处理不同的视觉任务,表现出色且优于许多大型模型。Florence-2的设计理念是…

用Postman Flows打造你的专属API:外部公开,轻松上手!

引言 Postman Flows 是一个使用 GUI 进行无代码 API 调用流程创建的服务。这篇文章我尝试使用 Flows 来构建将 Momento Topic 中的数据保存到 TiDB 的保存 API&#xff0c;因此想分享一些使用过程中的技巧等。 实现内容 将从 Momento Topics 配发的 JSON 数据保存到 TiDB 中。…

3086. 拾起 K 个 1 需要的最少行动次数

3086. 拾起 K 个 1 需要的最少行动次数 题目链接&#xff1a;3086. 拾起 K 个 1 需要的最少行动次数 代码如下&#xff1a; //参考链接:https://leetcode.cn/problems/minimum-moves-to-pick-k-ones/solutions/2692009/zhong-wei-shu-tan-xin-by-endlesscheng-h972 class Sol…

CrowdStrike引发全球微软系统大宕机:事故解析及网络安全反思

引言 近日&#xff0c;一次由CrowdStrike推送的更新引发了全球IT系统大规模故障。超过850万台电脑受到影响&#xff0c;涵盖各个行业和领域&#xff0c;引发了广泛关注和讨论。本文将详细解析此次事件的来龙去脉&#xff0c;评估其影响&#xff0c;并探讨网络安全的现状及未来…

C++ 栈( stack )学习

目录 1.栈 2.模拟栈 1.1.入栈( push ) 1.2.出栈( pop ) 1.3.获取栈顶元素( top ) 3.直接使用栈( stack ) 3.1.导入头文件并创建栈 3.2.栈的操作 3.2.1.入栈( push ) 3.2.2.出栈( pop ) 3.2.3.获取栈顶元素( top ) 3.2.4.获取栈中元素个数( size ) 3.2.5.判断栈是否…

代码随想录算法训练营day8 | 344.反转字符串、541.反转字符串 II、卡码网:54.替换数字

文章目录 344.反转字符串思路 541.反转字符串 II思路 卡码网&#xff1a;54.替换数字思路复习&#xff1a;字符串 vs 数组 总结 今天是字符串专题的第一天&#xff0c;主要是一些基础的题目 344.反转字符串 建议&#xff1a; 本题是字符串基础题目&#xff0c;就是考察 revers…

ChatGPT:宽列数据库是什么?

ChatGPT&#xff1a;宽列数据库是什么&#xff1f; 宽列数据库&#xff08;Wide-Column Store&#xff09;是一种 NoSQL 数据库&#xff0c;它的设计灵感来自于 Google 的 Bigtable。宽列数据库适用于处理大规模的分布式数据存储&#xff0c;特别是在需要高性能读写、灵活的数据…

docker挂载部署reids6.2.1

1.拉取镜像 docker pull redis:6.2.12.创建挂在目录&#xff08;根据自己要求修改具体目录&#xff09; mkdir -p /home/admin/redis/{data,conf}3.在/home/admin/redis/conf目录下创建redis.conf文件 cd /home/admin/redis/conf touch redis.conf4.复制下面文本到redis.conf…

深入理解 Laravel 中的会话管理

引言 会话管理是 Web 应用中一个至关重要的功能&#xff0c;它允许应用识别并跟踪用户的会话状态。Laravel 提供了一个强大而灵活的会话管理系统&#xff0c;使得开发者可以轻松实现用户状态的跟踪和管理。本文将详细介绍 Laravel 中的会话管理机制&#xff0c;包括会话的创建…

浅析JWT原理及牛客出现过的相关面试题

原文链接&#xff1a;https://kixuan.github.io/posts/f568/ 对jwt总是一知半解&#xff0c;而且项目打算写个关于JWT登录的点&#xff0c;所以总结关于JWT的知识及网上面试考察过的点 参考资料&#xff1a; Cookie、Session、Token、JWT_通俗地讲就是验证当前用户的身份,证明-…

不断把别人“装”进我们的灵魂口袋

嘿&#xff0c;朋友们&#xff01;今天我们来聊聊一种超酷的能量——本色示人。这不是什么秘密武器&#xff0c;但它比任何超能力都来得实在。 第一部分&#xff1a;本色示人&#xff0c;能量界的“超级赛亚人” 1.1 坦诚的超能力 想象一下&#xff0c;如果你的内心强大到可以…

使用SpringBoot中@Scheduled注解应用场景和示例代码

概述 Scheduled注解可以应用在方法上&#xff0c;用于指定方法的执行时间。它有几种常见的用法&#xff0c;可以设置固定的时间间隔、固定的延迟时间、或者使用Cron表达式来定义更复杂的调度规则。 应用场景 定时任务执行&#xff1a;例如每天凌晨执行数据备份。定时报表生成…

Window部署Ollama+Qwen2.0+Open-WebUI

文章目录 Windows下安装Docker安装Docker检查是否安装成功, 出现版本即为安装成功安装Ollama启动 Ollama 并拉取模型(选做) 修改默认地址和端口(选做) Ollama 进行跨域配置安装open-webui Windows下安装Docker 准备条件 开启Hyper-V&#xff0c;在“启用或关闭Windows功能”里…