IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> Postgres中jsonb类型 -> 正文阅读

[开发测试]Postgres中jsonb类型

Jsonb类型

PostgresSql支持两种JSON数据类型:json和jsonb。json类型以文本形式存储json对象,输入的文本是什么样的,存储的文本就是什么样的。每次处理时需要解析和分析文本格式的json,另外还存储了不必要的空白字符和重复键。jsonb类型将文本格式的json对象转换为二进制格式,并删除了不需要的空格及重复键。如果在输入中指定了重复的健,只有最后一个值会被保留。

最重要的一点:jsonb支持索引

通常情况下,选择用jsonb就可以,除非有特殊需求,比如对键值的顺序有要求。

操作

创建数据库并插入几条数据:

CREATE TABLE book (
  id SERIAL PRIMARY KEY,
  client TEXT NOT NULL,
  data JSONb NOT NULL
);

INSERT INTO book(client, data) values 
('Joe', '{ "title": "Siddhartha", "author": { "first_name": "Herman", "last_name": "Hesse"} }'),
('Jenny', '{ "title": "Dharma Bums", "author": { "first_name": "Jack", "last_name": "Kerouac"} }'),
('Jenny', '{ "title": "100 a?os de soledad", "author": { "first_name": "Gabo", "last_name": "Marquéz"} }');

SELECT * FROM book;

查询

->

select client, data->'title' as title, data->'author' as author from book;

结果如下:

clienttitleauthor
Joe"Siddhartha"{"first_name": "Herman", "last_name": "Hesse"}
Jenny"Dharma Bums"{"first_name": "Jack", "last_name": "Kerouac"}
Jenny"100 a?os de soledad"{"first_name": "Gabo", "last_name": "Marquéz"}

->>

select client, data->>'title' as title, data->'author'->>'first_name' as author from book;

结果如下:

clienttitleauthor
JoeSiddharthaHerman
JennyDharma BumsJack
Jenny100 a?os de soledadGabo

->->> 两种操作返回的结果可以看出,前者返回json对象,后者返回文本值。这两个操作对json字段同样适用。

嵌套过滤

select client, data->>'title' as title from book where data->'author'->>'last_name' = 'Kerouac';

返回结果:

clienttitle
JennyDharma Bums

其他操作

json和jsonb都支持
在这里插入图片描述

jsonb支持
在这里插入图片描述

举例查询:

select * from book where data @> '{"title": "Dharma Bums","author": {"last_name": "Kerouac","first_name": "Jack"}}'::jsonb;

结果如下:

idclientdata
2Jenny{"title":"Dharma Bums","author":{"last_name":"Kerouac","first_name":"Jack"}}

更新

update book set data = jsonb_set(data, '{author, first_name}', '"Hermany"') where id = 1;

再来查询更新后的结果:

idclientdata
1Joe{"first_name": "Hermany", "last_name": "Hesse"}

使用JPA持久化jsonb字段

添加JSONBinary库:

<dependency>
    <groupId>com.vladmihalcea</groupId>
    <artifactId>hibernate-types-52</artifactId>
    <version>2.2.2</version>
</dependency>

假设现在有一个Person的entity,其中有一个preference对象字段,需要按jsonb格式存储到数据库。需要在Person类和preference字段上使用jsonb的注解:

@TypeDef(name = "jsonb", typeClass = JsonBinaryType.class)
public class Person {
 
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
 
    private String name;
 
    @Column(columnDefinition = "jsonb")
    @Type(type = "jsonb")
    private Preference preference;
}

然后正常使用save函数就能就行保存和更新了。

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-01-28 12:13:05  更:2022-01-28 12:14:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 4:23:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码