前言
在这篇文章,我们保存了数据库的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()序列化输出,可以看到顺序不会被打乱,和数据库的一致。文章来源:https://www.toymoban.com/news/detail-617708.html
那么我们就可以直接拿到这一串数据和数据库进行模糊查询匹配。文章来源地址https://www.toymoban.com/news/detail-617708.html
到了这里,关于MyBatis-Plus 查询PostgreSQL数据库jsonb类型保持原格式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!