当前位置: 首页 > news >正文

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 对象

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 回调函数简易笔记
  • 计科录取75人!常州大学计算机考研考情分析!
  • 数字货币交易接口实现(含源代码)
  • 大模型深度神经网络(Deep Neural Network, DNN)
  • 【Python】如何在 Python 中操作 Excel
  • 【Emacs有什么优点,用Emacs写程序真的比IDE更方便吗?】
  • 网络芯片(又称为PHY网络芯片)
  • 【LeetCode】Top100 经典必刷题 06【6/20】
  • “论软件测试中缺陷管理及其应用”写作框架,软考高级论文,系统架构设计师论文
  • Oracle系统表空间的加解密
  • 基于springboot+vue+uniapp的养老院系统小程序
  • 2024最新Selenium面试题(附带答案),建议收藏备用
  • Flink入门(更新中)
  • linux 网络子系统
  • dh-virtualenv,一个超实用的 Python 库
  • ES6指北【2】—— 箭头函数
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • flutter的key在widget list的作用以及必要性
  • iOS 系统授权开发
  • Java 内存分配及垃圾回收机制初探
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • rabbitmq延迟消息示例
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • Wamp集成环境 添加PHP的新版本
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 从0实现一个tiny react(三)生命周期
  • 分类模型——Logistics Regression
  • 缓存与缓冲
  • 力扣(LeetCode)357
  • 浏览器缓存机制分析
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 异常机制详解
  • 责任链模式的两种实现
  • FaaS 的简单实践
  • MyCAT水平分库
  • 浅谈sql中的in与not in,exists与not exists的区别
  • !$boo在php中什么意思,php前戏
  • #define,static,const,三种常量的区别
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (20050108)又读《平凡的世界》
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (四)c52学习之旅-流水LED灯
  • (算法)大数的进制转换
  • (一)Linux+Windows下安装ffmpeg
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .NET 使用配置文件
  • .Net环境下的缓存技术介绍
  • .vue文件怎么使用_我在项目中是这样配置Vue的