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

这篇具有很好参考价值的文章主要介绍了MyBatis-Plus 查询PostgreSQL数据库jsonb类型保持原格式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

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

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

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

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


数据库

这有一组jsonb类型的数据:

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

问题背景

后端返回实体对象

  • 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))

输出数据如下:

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

可以看到,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 = []
}

输出数据如下:

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

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

那么我们就可以直接拿到这一串数据和数据库进行模糊查询匹配。文章来源地址https://www.toymoban.com/news/detail-617708.html

到了这里,关于MyBatis-Plus 查询PostgreSQL数据库jsonb类型保持原格式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mybatis plus 查询数据库字段名自动添加下划线问题解决

    实体类和数据库中的字段名是一致的,但报错Unknown column \\\'dept_id\\\' in \\\'field list\\\',这是因为plus中的驼峰命名法,会自动添加下划线。 关闭驼峰式命名转换为下划线 在配置文件中加一个: 重新运行,就可以了! 报错信息如下: java.sql.SQLSyntaxErrorException: Unknown column \\\'dept_id\\\' in \\\'fi

    2024年02月07日
    浏览(47)
  • MyBatis-plus中的两种快捷操作数据库方式:1、mapper调用 2、ActiveRecord方式(简称AR) 二者的使用和区别介绍

            在使用MyBatis操作数据库时,需要频繁的写mapper层dao接口以及对应的配置文件和SQL语句,当功能方法繁杂,业务逻辑不复杂的时候,我们可以使用MyBatis的升级版MyBatis-Plus来代替我们写这些繁琐的配置文件和简单的SQL。 (1)书写或使用MP生成数据库表对应的实体类。

    2024年02月07日
    浏览(61)
  • spring boot集成mybatis-plus——Mybatis Plus 查询数据(图文讲解)

     更新时间 2023-01-03 16:07:12 大家好,我是小哈。 本小节中,我们将学习如何通过 Mybatis Plus 查询数据库表中的数据。 在前面小节中,我们已经定义好了一个用于测试的用户表, 执行脚本如下: 定义一个名为  User  实体类: 不明白 Mybatis Plus 实体类注解的小伙伴,可参考前面

    2024年02月02日
    浏览(59)
  • mybatis-plus 查询数据为null问题解决

    首先数据库能查询到数据, 不过查询到的字段都是 null 值, 因为业务上就用到这3个字段 代码中使用 mybatis-plus 精确字段查询, select方法可以精确查询字段 之后debug看到 orderMain 对象为 null, 因为 这 3 个字段在数据库表中都是 null 解决方式是把 select方法需要查询一个数据库中不为

    2024年02月11日
    浏览(53)
  • mybatis-plus之排序查询

    一、orderByAsc 排序:ORDER BY 字段, ... ASC 例:  orderByAsc(\\\"id\\\", \\\"name\\\") --- order by id ASC,name ASC #二、orderByDesc 排序:ORDER BY 字段, ... DESC 例:  orderByDesc(\\\"id\\\", \\\"name\\\") --- order by id DESC,name DESC #三、orderBy 排序:ORDER BY 字段, ... 例:  orderBy(true, true, \\\"id\\\", \\\"name\\\") --- order by id ASC,name ASC  倒叙排序  

    2024年02月15日
    浏览(42)
  • MyBatis-Plus条件查询问题解决

    问题描述 系统中有用户注册的功能,但是会出现重复注册的现象,代码中有做过重复校验,但是没有生效。 问题解决 首先排查数据生成时间点不同,相差时间有长有短,不是用户同时多次点击的原因,应该是用户这边不同时间重复多次注册导致的,但是程序中防止重复校验

    2024年02月16日
    浏览(46)
  • MyBatis-Plus(三.Wrapper条件查询)

    Wrapper是Mybatis-plus中特有的 条件封装接口 也就是把 查询的条件 封装到Wrapper实现类中 它的各个实现类有什么作用呢, 我觉得直接 顾名思义 吧  QueryWrapper(删,查) 因为参数一般都从前端传来的数据中得到, 所以必须用条件封装的第一个参数确认它不为null UpdateWrapper(改) LambdaQuer

    2024年02月04日
    浏览(36)
  • mybatis-plus实现分页查询

    分页查询使用的方法是: IPage:用来构建分页查询条件 Wrapper:用来构建条件查询的条件,目前我们没有可直接传为Null IPage:返回值,你会发现构建分页条件和方法的返回值都是IPage IPage是一个接口,我们需要找到它的实现类来构建它,具体的实现类,可以进入到IPage类中按ctrl+

    2023年04月08日
    浏览(50)
  • MyBatis-Plus分页查询(快速上手运用)

    Mybatis-Plus知识点[MyBatis+MyBatis-Plus的基础运用]_心态还需努力呀的博客-CSDN博客   Mybatis-Plus+SpringBoot结合运用_心态还需努力呀的博客-CSDN博客 MyBaits-Plus中@TableField和@TableId用法_心态还需努力呀的博客-CSDN博客 MyBatis-Plus中的更新操作(通过id更新和条件更新)_心态还需努力呀的博

    2024年02月16日
    浏览(51)
  • Mybatis-Plus高级查询LambdaQueryWrapper&QueryWrapper

    目录 前言 Wrapper 查询构造器 查询条件 前期准备 查询条件 allEq eq ne gt ge lt le between,notBetween like,notLike likeLeft likeRight isNull 空值查询 isNotNull 非空值查询 in notIn inSql、notInSql groupBy orderBy、orderByAsc、orderByDesc or、and 解决方法 last exists、notExists 总结 附加MySQL语句执行顺序 我刚刚毕

    2024年02月04日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包