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

MyBatis-Plus 查询PostgreSQL数据库jsonb类型保持原格式

文章目录

  • 前言
  • 数据库
  • 问题背景
    • 后端返回实体对象
    • 前端
  • 实现
    • 后端返回List<Map<String, Object>>
    • 前端


前言

在这篇文章,我们保存了数据库的jsonb类型:MyBatis-Plus 实现PostgreSQL数据库jsonb类型的保存与查询

这篇文章介绍了模糊查询json/jsonb类型:PostgreSQL 查询json/jsonb是否存在某个片段

在模糊查询json/jsonb之前,我们得拿到正确的json/jsonb片段,比如我们模糊查询好几个连着的键值对,如果我们拿到的键的顺序打乱了,我们想要一次性模糊查询json/jsonb数据就查询不到正确的数据了。

本文接下来将会讲解在MyBatis-Plus中如何实现返回给前端json/jsonb数据的键值对格式和数据库的格式一致。


数据库

这有一组jsonb类型的数据:

在这里插入图片描述

问题背景

后端返回实体对象

  • specialControl为jsonb类型

以下代码实现了数据返回接口,并可模糊查询jsonb类型

@GetMapping
@ResponseBody
public Object get(@RequestParam(value = "id", required = false) String id,@RequestParam(value = "name", required = false) String name,@RequestParam(value = "specialControl", required = false) String specialControl) {MPJQueryWrapper<Strategy> mpjQueryWrapper = new MPJQueryWrapper<>();mpjQueryWrapper.selectAll(Strategy.class).eq(StringUtil.isNotEmpty(id), "t.id", id).like(StringUtil.isNotEmpty(name), "t.name", name).orderByDesc("t.create_time");if (StringUtil.isNotEmpty(specialControl)) {mpjQueryWrapper.like("t.special_control::text", specialControl.replace(":", ": ").replace(",", ", "));}return strategyService.selectJoinList(Strategy.class, mpjQueryWrapper);
}

前端

序列化Json对象并输出

console.log(JSON.stringify(this.form.specialControl))

输出数据如下:

在这里插入图片描述

可以看到,content 内的键值对的顺序被打乱,和数据库的不一致。

实现

后端返回List<Map<String, Object>>

数据库列名为 special_control,前端数据为驼峰格式,需进行别名 special_control as \"specialControl\"

此时数据库的jsonb数据会被序列化返回给前端,所以jsonb的键值对顺序不会被打乱

  • 序列化:把对象转换为字节序列的过程称为对象的序列化
  • 反序列化:把字节序列恢复为对象的过程称为对象的反序列化
@GetMapping
@ResponseBody
public List<Map<String, Object>> get(@RequestParam(value = "id", required = false) String id,@RequestParam(value = "name", required = false) String name,@RequestParam(value = "specialControl", required = false) String specialControl) {MPJQueryWrapper<Strategy> mpjQueryWrapper = new MPJQueryWrapper<>();mpjQueryWrapper.select("t.id as id, t.name as name, t.special_control as \"specialControl\"").eq(StringUtil.isNotEmpty(id), "t.id", id).like(StringUtil.isNotEmpty(name), "t.name", name).orderByDesc("t.create_time");if (StringUtil.isNotEmpty(specialControl)) {mpjQueryWrapper.like("t.special_control::text", specialControl.replace(":", ": ").replace(",", ", "));}return strategyService.listMaps(mpjQueryWrapper);
}

前端

if (this.form.specialControl != null) {// 反序列化this.form.specialControl = JSON.parse(this.form.specialControl)// 序列化并输出console.log(JSON.stringify(this.form.specialControl))
} else {this.form.specialControl = []
}

输出数据如下:

在这里插入图片描述

即使前端JSON.parse()序列化了字节,再通过JSON.stringify()反序列化输出,可以看到顺序不会被打乱,和数据库的一致。

那么我们就可以直接拿到这一串数据和数据库进行模糊查询匹配。

http://www.lryc.cn/news/100916.html

相关文章:

  • Linux操作系统1-命令篇
  • opencv-24 图像几何变换03-仿射-cv2.warpAffine()
  • 前端常用的条件限制方法小笔记
  • 【LeetCode 算法】Minimum Operations to Halve Array Sum 将数组和减半的最少操作次数-Greedy
  • Doc as Code (3):业内人士的观点
  • 【Kafka】消息队列Kafka基础
  • Java的第十五篇文章——网络编程(后期再学一遍)
  • 【深度学习】High-Resolution Image Synthesis with Latent Diffusion Models,论文
  • 前端学习——Vue (Day6)
  • STM32MP157驱动开发——按键驱动(tasklet)
  • PostgreSQL构建时间
  • 2023-将jar包上传至阿里云maven私有仓库(云效制品仓库)
  • 嵌入式linux之OLED显示屏SPI驱动实现(SH1106,ssd1306)
  • 关于element ui 安装失败的问题解决方法、查看是否安装成功及如何引入
  • Selenium多浏览器处理
  • 浅谈 AI 大模型的崛起与未来展望:马斯克的 xAI 与中国产业发展
  • 【CesiumJS材质】(1)圆扩散
  • 实战-单例模式和创建生产者相结合
  • [SQL挖掘机] - 窗口函数介绍
  • 原生js实现锚点滚动顶部
  • 使用mysql接口遇到点问题
  • excel绘制折线图或者散点图
  • ChatGPT长文本对话输入方法
  • FFmpeg-swresample的更新
  • 回答网友 修改一个exe
  • 数据可视化 - 动态柱状图
  • 【JVM】JVM五大内存区域介绍
  • 自动驾驶感知系统--惯性导航定位系统
  • Netty简介
  • 基于TCP/IP对等模型对计算机网络知识点的整合