南昌哪里做网站好,深圳网站建设知了网络,做的网站显示图片很慢,广州市口碑seo推广文章目录 前言数据库问题背景后端返回实体对象前端 实现后端返回ListMapString, Object前端 前言
在这篇文章#xff0c;我们保存了数据库的jsonb类型#xff1a;MyBatis-Plus 实现PostgreSQL数据库jsonb类型的保存与查询
这篇文章介绍了模糊查询json/json… 文章目录 前言数据库问题背景后端返回实体对象前端 实现后端返回ListMapString, 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) {MPJQueryWrapperStrategy 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 内的键值对的顺序被打乱和数据库的不一致。
实现
后端返回ListMapString, Object
数据库列名为 special_control前端数据为驼峰格式需进行别名 special_control as \specialControl\
此时数据库的jsonb数据会被序列化返回给前端所以jsonb的键值对顺序不会被打乱
序列化把对象转换为字节序列的过程称为对象的序列化反序列化把字节序列恢复为对象的过程称为对象的反序列化
GetMapping
ResponseBody
public ListMapString, Object get(RequestParam(value id, required false) String id,RequestParam(value name, required false) String name,RequestParam(value specialControl, required false) String specialControl) {MPJQueryWrapperStrategy 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()反序列化输出可以看到顺序不会被打乱和数据库的一致。
那么我们就可以直接拿到这一串数据和数据库进行模糊查询匹配。