pgsql操作json类型

目录

一、表结构

二、实体类

三、json处理器

四、配置文件

五、josn数据

1、插入

2、查找


一、表结构

CREATE TABLE "public"."pg_user" ("id" int8 NOT NULL GENERATED ALWAYS AS IDENTITY (
INCREMENT 1
MINVALUE  1
MAXVALUE 9223372036854775807
START 1
CACHE 1
),"name" varchar(255) COLLATE "pg_catalog"."default","age" int4,"sex" varchar(255) COLLATE "pg_catalog"."default","create_time" timestamp(0),"create_name" varchar(255) COLLATE "pg_catalog"."default","update_time" timestamp(0),"update_name" varchar(255) COLLATE "pg_catalog"."default","is_del" varchar(255) COLLATE "pg_catalog"."default" DEFAULT '0'::character varying,"liu_xi" json,CONSTRAINT "pg_user_pkey" PRIMARY KEY ("id")
)
;ALTER TABLE "public"."pg_user" OWNER TO "postgres";

二、实体类

Entity

package com.chensir.system.domain.entity;import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotation.*;
import com.chensir.domain.BaseEntity;
import com.chensir.handler.ObjectJsonHandler;
import lombok.Data;/*** @author ChenSir* @Date 2023/9/11**/
@Data
@TableName(value = "public.pg_user")
public class PgUser extends BaseEntity {@TableId(value = "id", type = IdType.AUTO)private Long id;private String name;private Integer age;private String sex;private JSONObject liuXi;@TableLogicprivate String isDel;}

Bo

package com.chensir.system.domain.bo;import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.chensir.domain.BaseEntity;
import com.chensir.handler.ObjectJsonHandler;
import lombok.Data;/*** @author ChenSir* @Date 2023/9/11**/
@Data
public class PgUserBo extends BaseEntity {private Long id;private String name;private Integer age;private String sex;private JSONObject liuXi;}

Vo

package com.chensir.system.domain.vo;import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.chensir.handler.ObjectJsonHandler;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;import java.time.LocalDateTime;/*** @author ChenSir* @Date 2023/9/11**/
@Data
public class PgUserVo {private Long id;private String name;private Integer age;private String sex;@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime createTime;private String createName;@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime updateTime;private String updateName;private JSONObject liuXi;}

三、json处理器

package com.chensir.handler;import com.alibaba.fastjson.JSONObject;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedTypes;
import org.postgresql.util.PGobject;import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;/*** pgsql-json处理器* @author ChenSir* @Date 2023/9/11* postgres中json格式的字段,进行转换的自定义转换器,转换为实体类的JSONObject属性* MappedTypes注解中的类代表此转换器可以自动转换为的java对象*/
@MappedTypes(JSONObject.class) // 会对使用JSONObject类型的字段进行json映射
public class ObjectJsonHandler extends BaseTypeHandler<JSONObject> {//引入PGSQL提供的工具类PGobjectprivate static final PGobject jsonObject = new PGobject();@Overridepublic void setNonNullParameter(PreparedStatement ps, int i, JSONObject param, JdbcType jdbcType) throws SQLException {//转换的操作在这里!!!jsonObject.setType("json");jsonObject.setValue(param.toString());ps.setObject(i, jsonObject);}@Overridepublic JSONObject getNullableResult(ResultSet rs, String columnName) throws SQLException {String sqlJson = rs.getString(columnName);if (null != sqlJson) {return JSONObject.parseObject(sqlJson);}return null;}//根据列索引,获取可以为空的结果@Overridepublic JSONObject getNullableResult(ResultSet rs, int columnIndex) throws SQLException {String sqlJson = rs.getString(columnIndex);if (null != sqlJson) {return JSONObject.parseObject(sqlJson);}return null;}@Overridepublic JSONObject getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {String sqlJson = cs.getString(columnIndex);if (null != sqlJson) {return JSONObject.parseObject(sqlJson);}return null;}
}
        <dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>42.2.14</version></dependency>

四、配置文件

使用jsonObject需要在Mybatis-plus添加json处理器包路径

  type-handlers-package: com.chensir.handler

五、josn数据

{"createtime": "2020-08-06T03:57:08.382Z","dataid": "727d2094-f6b3-4eee-a39b-7544c04105fc","schemaid": "ec9ebd79-d74d-4e0f-b026-9653006940f2","items": {"product": "Toy Train","qty": 2}
}

1、插入

INSERT INTO public.pg_user ( liu_xi ) VALUES ( {"createtime":"2020-08-06T03:57:08.382Z","dataid":"727d2094-f6b3-4eee-a39b-7544c04105fc","schemaid":"ec9ebd79-d74d-4e0f-b026-9653006940f2","items": {"product": "Toy Train","qty": 2}} )

2、查找

1、使用select语句查找json数据,与其他基本类型类似

select * from public.pg_user

2、查询json中所有dataid作为键

select liu_xi -> 'dataid' as dataid 
from public.pg_user

3、查询json中所有dataid作为文本

selectliu_xi ->> 'dataid' as dataid
frompublic.pg_user

4、->操作返回json对象,可以链式调用 ->>返回特定节点。

先使用liu_xi-> 'items' 返回对象。然后使用liu_xi -> 'items' ->> 'product' 返回所有产品文本值。

selectliu_xi -> 'items' ->> 'product' as product
frompublic.pg_user
order byproduct

where查询略

可参考:

PostgreSQL JSON数据类型_postgis geojson字段类型_梦想画家的博客-CSDN博客

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

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

相关文章

开源日报 0830 | 免费计算机科学自学路径:系统化教育与全球支持

ossu/computer-science Stars: 141.9k License: MIT 这个开源项目是一个自学计算机科学的免费路径。它提供了一套完整的在线教育材料&#xff0c;旨在为那些希望获得全面、扎实基础和良好习惯的人们提供支持。该课程按照本科计算机专业要求设计&#xff0c;并且选取了来自哈佛…

【Java】什么是过滤器链(FilterChain )?哪些场景可以使用过滤器链?

文章目录 前言1、创建过滤器2、修改 web.xml3、运行项目并查看结果 前言 在一个 Web 应用程序中可以注册多个 Filter 程序&#xff0c;每个 Filter 程序都可以针对某一个 URL 进行拦截。如果多个 Filter 程序都对同一个 URL 进行拦截&#xff0c;那么这些 Filter 就会组成一个…

【UE5 智慧城市系列】5-通过鼠标键盘控制摄像机

目标 通过鼠标WASD键控制摄像机前后左右移动&#xff0c;鼠标滚轮控制弹簧臂长度的修改&#xff0c;鼠标中键控制摄像机旋转。 步骤 1. 首先创建一个游戏模式&#xff0c;这里命名为“BP_GameMode” 2. 再创建一个玩家控制器&#xff0c;这里命名为“BP_PlayerController” …

计算由于海洋温度和盐度变化产生的比容海平面变化

近些年由于全球气候变暖&#xff0c;全球的海平面不断上升。目前的研究显示&#xff0c;造成海平面变化的原因主要有两个&#xff1a;一个是由于陆地质量的流入&#xff08;比如两级冰川的融化&#xff0c;冰雪以径流的形式汇入海洋&#xff0c;总体上使得海洋的总质量产生变化…

数据结构——排序算法——插入排序

交换法插入排序 void swap(vector<int> arr, int i, int j) {int temp arr[i];arr[i] arr[j];arr[j] temp;}void insertSort(vector<int> arr) {// 从第二个数开始&#xff0c;往前插入数字for (int i 1; i < arr.size(); i) {// j 记录当前数字下标int j …

图像处理算法实战【1】超详细整理 | 新手入门实用指南 | 图像处理基础

1. 什么是图像 & 图像在计算机中如何存储&#xff1f;2. 图像可分为哪些类型&#xff1f; 2.1. 二值(黑白)图像2.2. 灰度图像2.3. RGB彩色图像2.4. RGBA图像 3. 什么是图像通道&#xff1f;4. 图像处理 4.1. 什么是图像处理&#xff1f;4.2. 图像处理流程4.3. 图像处理技术…

《Docker 容器化的艺术:深入理解容器技术》

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f405;&#x1f43e;猫头虎建议程序员必备技术栈一览表&#x1f4d6;&#xff1a; &#x1f6e0;️ 全栈技术 Full Stack: &#x1f4da…

Redis哨兵集群的介绍及搭建

Redis 是一款开源的、内存中的数据结构存储系统&#xff0c;它可以用作数据库、缓存和消息中间件。然而&#xff0c;作为一个单点服务&#xff0c;Redis 在面临硬件故障或者网络问题时可能会导致服务不可用。为了解决这个问题&#xff0c;Redis 提供了哨兵模式&#xff0c;一个…

聚类分析 | MATLAB实现基于SOM自组织特征映射聚类可视化

聚类分析 | MATLAB实现基于SOM自组织特征映射聚类可视化 目录 聚类分析 | MATLAB实现基于SOM自组织特征映射聚类可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基于自组织特征映射聚类算法(SOM)的数据聚类可视化 可直接运行 注释清晰 Matlab语言 1.多特征输入&…

MATLAB科学计算从入门到精通

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 MATLAB&#xff08;Matr…

安科瑞ADL400产品功能及参数说明,适用于5G基站计量使用

安科瑞虞佳豪壹捌柒陆壹伍玖玖零玖叁 “十四五”以来&#xff0c;重庆新型数字基础设施建设取得明显成效&#xff0c;截至今年6月底&#xff0c;每万人拥有5G基站数24个&#xff0c;5G发展保持在全国第一梯队。 新型数字基础设施包括5G网络、千兆光网、数据中心、工业互联网、…

pc端测试手机浏览器运行情况,主要是测试硬件功能

测试h5震动摇晃等功能时不方便测试&#xff0c;需要连电脑显示调试数据 方法&#xff1a; 1.需要手机下载谷歌浏览器&#xff0c;pc端用edge或这谷歌浏览器 2.手机打开USB调试&#xff0c;打开要测试的网页 3.pc端地址栏输入edge://inspect/#devices&#xff08;这里用的edge浏…