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

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博客

相关文章:

pgsql操作json类型

目录 一、表结构 二、实体类 三、json处理器 四、配置文件 五、josn数据 1、插入 2、查找 一、表结构 CREATE TABLE "public"."pg_user" ("id" int8 NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 MINVALUE 1 MAXVALUE 92233720…...

Thinkphp6 配置并使用redis图文详解 小皮面板

这篇文章主要介绍了Thinkphp6 配置并使用redis的方法,结合实例形式详细分析了Redis的安装、配置以及thinkphp6操作Redis的基本技巧,需要的朋友可以参考下 一、安装redis ThinkPHP内置支持的缓存类型包括file、memcache、wincache、sqlite。ThinkPHP默认使用自带的采用think\Ca…...

模拟实现链式二叉树及其结构学习——【数据结构】

W...Y的主页 &#x1f60a; 代码仓库分享 &#x1f495; 之前我们实现了用顺序表完成二叉树(也就是堆)&#xff0c;顺序二叉树的实际作用就是解决堆排序以及Topk问题。 今天我们要学习的内容是链式二叉树&#xff0c;并且实现链式二叉树&#xff0c;这篇博客与递归息息相关&a…...

基于go版本的LoraWAN Server 的470MHz频段的设置

一、参考链接 如果您已经基于最新版本的LoraWAN Server&#xff08;go 版本&#xff09;的环境&#xff0c;搭建好了服务器的环境&#xff0c;但尚未进行参数设置&#xff08;此处以470MHz频段设置为例&#xff09;&#xff0c;可以参考如下链接进行设置&#xff1a; LoraWAN…...

C与C++的函数相互调用

无法直接调用原因&#xff1a; C 和 C 的函数可以相互调用&#xff0c;但需要一些特殊的注意事项&#xff0c;因为它们有不同的编译和链接规则以及一些语法差异。 链接规则&#xff1a; C 语言的链接器通常使用 C 标准的函数命名和调用约定&#xff0c;而 C 链接器使用 C 的函数…...

MySQL架构介绍与说明

1、MySQL架构介绍 和其它数据库相比&#xff0c;MySQL有点与众不同&#xff0c;它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎的架构上&#xff0c; 插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离。这种架构可以根据业务的…...

three3D的vite+vue版本基础代码

自己稍微处理一下目录结构 <script setup>// 导入three.js import * as THREE from three// 创建场景 const scene new THREE.Scene();// 创建相机 const camera new THREE.PerspectiveCamera(45, //视角window.innerWidth / window.innerHeight, //宽高比0.1, // 近平…...

实现按钮悬停动画

知识点与技巧 伪元素 使用伪元素来作为按钮悬停效果动画展示的元素 z-index 的使用技巧 使用z-index属性来控制按钮和伪元素的层次关系 transform、transition 复习 使用transform、transition两个属性来实现动画的展示 按钮边框动画 切换效果 核心代码 .btn.btn-border-…...

【C++】深拷贝和浅拷贝 ② ( 默认拷贝构造函数是浅拷贝 | 代码示例 - 浅拷贝造成的问题 )

文章目录 一、默认拷贝构造函数是浅拷贝1、默认拷贝构造函数2、默认拷贝构造函数是浅拷贝机制 二、代码示例 - 浅拷贝造成的问题 一、默认拷贝构造函数是浅拷贝 1、默认拷贝构造函数 如果 C 类中 没有定义拷贝构造函数 , C 编译器会自动为该类提供一个 " 默认的拷贝构造函…...

【Selenium】webdriver.ChromeOptions()官方文档参数

Google官方Chrome文档&#xff0c;在此记录一下 Chrome Flags for Tooling Many tools maintain a list of runtime flags for Chrome to configure the environment. This file is an attempt to document all chrome flags that are relevant to tools, automation, benchm…...

pytorch代码实现之动态卷积模块ODConv

ODConv动态卷积模块 ODConv可以视作CondConv的延续&#xff0c;将CondConv中一个维度上的动态特性进行了扩展&#xff0c;同时了考虑了空域、输入通道、输出通道等维度上的动态性&#xff0c;故称之为全维度动态卷积。ODConv通过并行策略采用多维注意力机制沿核空间的四个维度…...

动态规划:子序列问题(C++)

动态规划&#xff1a;子序列问题 前言子序列问题1.最长递增子序列&#xff08;中等&#xff09;2.摆动序列&#xff08;中等&#xff09;3.最长递增子序列的个数&#xff08;中等&#xff09;4.最长数对链&#xff08;中等&#xff09;5.最长定差子序列&#xff08;中等&#x…...

ORACLE的分区(一)

目录 一、分区概念 二、表分区的优点 三、分区策略 一、分区概念 随着时间的发展&#xff0c;一个表的数据会越来越多&#xff0c;当数据量增大的时候我们一般采取建立索引优化索引的方式提高查询速度&#xff0c;但是数据量再次增大即使是索引也无法提高速度&#xff0c;这时…...

【数据结构】C++实现二叉搜索树

二叉搜索树的概念 二叉搜索树又称为二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树&#xff1a; 若它的左子树不为空&#xff0c;则左子树上所有结点的值都小于根结点的值。若它的右子树不为空&#xff0c;则右子树上所有结点的值都大于根结…...

Python中Mock和Patch的区别

前言&#xff1a; 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 在测试并行开发&#xff08;TPD&#xff09;中&#xff0c;代码开发是第一位的。 尽管如此&#xff0c;我们还是要写出开发的测试&#xff0c…...

sql server 查询某个字段是否有值 返回bool类型

sql server 查询某个字段是否有值 返回bool类型&#xff0c;true 或 false SELECT ColumnCode,CONVERT(BIT,CASE WHEN LEN(ColumnCode) > 0 THEN 1 ELSE 0 END) AS HasValue FROM dbo.TF_LessonCatalog...

紫光展锐5G芯T820 解锁全新应用场景,让机器人更智能

数字经济的持续发展正推动机器人产业成为风口赛道。工信部数据显示&#xff0c;2023年上半年&#xff0c;我国工业机器人产量达22.2万套&#xff0c;同比增长5.4%&#xff1b;服务机器人产量为353万套&#xff0c;同比增长9.6%。 作为国内商用服务机器人领先企业&#xff0c;云…...

秋招前端面试题总结

1、this指向问题&#xff0c;以前总是迷糊&#xff0c;现在总算是一知半解了。应当遵循以下原则&#xff0c;应该就能做对题目了。 如果一个标准函数&#xff0c;也就是非箭头函数&#xff0c;作为某个对象的方法被调用时&#xff0c;那么这个this指向的就是这个对象。涉及到闭…...

【入门篇】ClickHouse 数据类型

文章目录 1. 引言2. ClickHouse 数据类型2.1 基本数据类型2.1.1 整型2.1.2 浮点型2.1.3 字符串型 2.2 复合数据类型2.2.1 数组2.2.2 枚举类型2.2.3 元组2.2.4 Map2.2.5 Nullable 2.3 特殊数据类型2.3.1 日期和时间类型2.3.2 UUID2.3.3 IP 地址2.3.4 AggregateFunction 2.4 数据…...

关于Python数据分析,这里有一条高效的学习路径

无处不在的数据分析 谷歌的数据分析可以预测一个地区即将爆发的流感&#xff0c;从而进行针对性的预防&#xff1b;淘宝可以根据你浏览和消费的数据进行分析&#xff0c;为你精准推荐商品&#xff1b;口碑极好的网易云音乐&#xff0c;通过其相似性算法&#xff0c;为不同的人…...

如何通过有效方法提升儿童专注力障碍的注意力集中度?

提升儿童专注力的有效策略与技巧解析 在帮助儿童提高注意力集中度的过程中&#xff0c;首先需要建立一个适合学习的环境。创造一个安静、整洁的学习空间&#xff0c;减少杂音和干扰&#xff0c;有助于孩子更好地专注。此外&#xff0c;开展一些分段学习的小技巧也是非常有效的方…...

FlexASIO专业调优实战:解决音频延迟与音质问题的3步诊断法

FlexASIO专业调优实战&#xff1a;解决音频延迟与音质问题的3步诊断法 【免费下载链接】FlexASIO A flexible universal ASIO driver that uses the PortAudio sound I/O library. Supports WASAPI (shared and exclusive), KS, DirectSound and MME. 项目地址: https://gitc…...

Openclaw 股票分析助手,自定义选股+情绪预警实时推送

最近我越来越觉得&#xff0c;炒股这件事&#xff0c;难的不是完全看不懂&#xff0c;而是你根本没那么多时间&#xff0c;把该看的东西全都看一遍。平时工作忙一点&#xff0c;白天不是在开会&#xff0c;就是在处理各种事情。别说一直盯着盘面了&#xff0c;有时候连行情软件…...

ddclient与主流网络服务集成:PPP、DHCP、systemd和cron的完美搭配

ddclient与主流网络服务集成&#xff1a;PPP、DHCP、systemd和cron的完美搭配 【免费下载链接】ddclient Ddclient updates dynamic DNS entries for accounts on a wide range of dynamic DNS services. 项目地址: https://gitcode.com/gh_mirrors/dd/ddclient ddclien…...

用STM32F103和TMC2209给步进电机加个‘防丢步’外挂:手把手实现位置式PID闭环

用STM32F103和TMC2209给步进电机加个‘防丢步’外挂&#xff1a;手把手实现位置式PID闭环 步进电机在3D打印机、CNC机床和自动化设备中无处不在&#xff0c;但许多开发者都遇到过这样的尴尬&#xff1a;明明发送了1000个脉冲&#xff0c;电机却只转了980步。这种"丢步&quo…...

K8s配置管理实战:如何优雅地通过ConfigMap挂载应用配置文件

1. ConfigMap基础&#xff1a;为什么它是Kubernetes配置管理的瑞士军刀 第一次接触Kubernetes时&#xff0c;我习惯性地把配置文件打包进Docker镜像&#xff0c;结果每次改配置都要重新构建镜像&#xff0c;CI/CD流水线跑得我怀疑人生。直到发现了ConfigMap这个神器&#xff0c…...

告别新建工程烦恼:手把手教你为复旦微FM33LE0XX搭建IAR标准库工程模板

复旦微FM33LE0XX开发实战&#xff1a;打造可复用的IAR标准工程模板 在嵌入式开发领域&#xff0c;每次新建项目都从零开始配置工程文件无异于重复造轮子。对于复旦微FM33LE0XX系列单片机开发者而言&#xff0c;一个精心设计的标准工程模板能节省至少80%的初始化时间。本文将带你…...

让 Launchpad Designer 也拥有一致的 Fiori 登录体验:从 SICF 配置到版本差异的完整实战解析

在 SAP Fiori 项目里,很多团队把注意力都放在 Launchpad 本身的主题、磁贴、目录、目标映射和角色分配上,却很容易忽略一个看起来不起眼、实际上会直接影响运维效率和管理员体验的细节:Launchpad Designer 的登录页。官方文档明确说明,SAP Fiori 的登录页本质上是对标准 AB…...

Qwen2.5-0.5B Instruct在软件测试中的自动化应用

Qwen2.5-0.5B Instruct在软件测试中的自动化应用 1. 引言 软件测试是确保产品质量的关键环节&#xff0c;但传统测试方法往往耗时费力。开发人员需要编写大量测试用例&#xff0c;执行重复的测试流程&#xff0c;还要分析复杂的测试结果。这个过程不仅枯燥&#xff0c;还容易…...

IndexTTS-2-LLM语音生成延迟高?CPU算力优化实战指南

IndexTTS-2-LLM语音生成延迟高&#xff1f;CPU算力优化实战指南 1. 问题背景与挑战 IndexTTS-2-LLM作为一款优秀的智能语音合成系统&#xff0c;在语音质量和自然度方面表现出色。但在CPU环境下运行时&#xff0c;用户经常会遇到语音生成延迟较高的问题&#xff0c;影响使用体…...