最近新开发的一个功能使用到postgresql中的jsonb数据类型。架构师可能考虑到这种数据格式更加便于存储json格式的数据,因此考虑使用这种数据类型。自己以前未曾使用过这种数据类型,因此需要现学现用。同事给我指点了一下,说这种数据类型可以当做字符串来处理。马上去搜索引擎中查找学习资料,看看这种数据类型的应用场景,以及如何使用这种数据类型。看了很多篇博文,认识到这种数据类型不能直接使用mybatis插入,需要单独使用转换类。自己试着按照网友提供的教程测试,发现可以正常新增数据。注意事项:需要使用JSON.toJSONString()方法将需要处理的数据进行转换,并且这种转换是在转换类中完成的。

转换类的示例代码如下:

@MappedTypes({Object.class})


(资料图片仅供参考)

public class JsonbTypeHandlerextends BaseTypeHandler {

private static final PGobject pGobject = new PGobject();

@Override

public void setNonNullParameter(PreparedStatement preparedStatement, int i, Object o, JdbcType jdbcType) throws SQLException {

pGobject .setType("jsonb");

pGobject .setValue(JSON.toJSONString(o));

preparedStatement.setObject(i, pGobject);

}

@Override

public Object getNullableResult(ResultSet resultSet, String s) throws SQLException {

return resultSet.getString(s);

}

@Override

public Object getNullableResult(ResultSet resultSet, int i) throws SQLException {

return resultSet.getString(i);

}

@Override

public Object getNullableResult(CallableStatement callableStatement, int i) throws SQLException {

return callableStatement.getString(i);

}

}

mybatis的xml文件中的用法为ac_title = #{addition, typeHandler=包路径.JsonbTypeHandler},

开发的功能中页面传入的数据是数组类型,后端Java接收的时候使用的是Object类型。使用mybatis逆向工程插件生成的实体类中,jsonb类型对应的java数据类型也是Object类型。新增数据的时候,通过上面的转换类将Object类型转换为jsonb类型,这样即可新增成功。修改操作和新增操作一样,不再赘述。新增操作完成后下一步就是查询,取数据的时候mybatis中直接使用varchar类型接收,代码中还是使用Object接收即可。

根据业务需求,开发过程中还需要解析jsonb格式的数据。由于数据格式不一样,解析的方式也不一样,自己使用的JSON框架是fastJson框架。第一种情况,从页面中传入的json数组数据,解析的时候直接使用JSON.parseArray();由于是使用Object数据类型接收,需要使用JSON.toJSONString()方法转换一下,才可以转换为list集合。示例代码如下

List dataList = JSON.parseArray(JSON.toJSONString(Object类型的数据), String.class);

这样就可以获取到页面中传入的JSON数组数据,然后在做进一步的处理即可。第二种情况,如果是已经保存到数据库中的数据,则直接使用JSON.parseArray()进行转换即可,不需要其他操作。示例代码如下:

List dataList = JSON.parseArray(数据库中的数据.toString(), String.class);

测试过程中,解析json数据遇到的一些问题,主要就是转换错误的问题。经过反反复复的尝试,最终才确定下来如何进行转换,如何进行解析。已经部署在测试环境中正常运行,各种功能都正常,即将发布新版本,到此功能完成。

参考博文:

https://www.cnblogs.com/liangyy/p/13573043.html

推荐内容

  • 世界微资讯!mybatis使用postgresql中的jsonb数据类型
    世界微资讯!mybatis使用postgresql中的jsonb数据类型

  • 学习笔记——书城项目第五阶段之购物项加号、购物项减号
    学习笔记——书城项目第五阶段之购物项加号、购物项减号

  • 【世界快播报】记一次2022某地HVV中的逆向分析
    【世界快播报】记一次2022某地HVV中的逆向分析

  • docker network
    docker network

  • 世界快看点丨【甘特图软件部件】上海道宁与​DlhSoft助力您的Windows与移动应用程序开发
    世界快看点丨【甘特图软件部件】上海道宁与​DlhSoft助力您的Windows与移动应用程序开发

  • 世界百事通!学习笔记——CommonResult工具、书城项目第五阶段(清空购物车、删除购物项、对数量的修改)
    世界百事通!学习笔记——CommonResult工具、书城项目第五阶段(清空购物车、删除购物项、对数量的修改)

  • java中的多线程
    java中的多线程

  • 2022 最新版 JDK 17 下载与安装 步骤演示 (图示版)
    2022 最新版 JDK 17 下载与安装 步骤演示 (图示版)

  • 世界热讯:【验证码逆向专栏】某验四代滑块验证码逆向分析
    世界热讯:【验证码逆向专栏】某验四代滑块验证码逆向分析

  • 世界讯息:Dubbo 3 端口协议复用
    世界讯息:Dubbo 3 端口协议复用

  • 每日快看:浅谈多项式与生成函数
    每日快看:浅谈多项式与生成函数

  • hive调优之参数设置
    hive调优之参数设置

  • 如何接入畅联云平台管理物联网设备?
    如何接入畅联云平台管理物联网设备?

  • 【速看料】IM通讯协议专题学习(七):手把手教你如何在NodeJS中从零使用Protobuf
    【速看料】IM通讯协议专题学习(七):手把手教你如何在NodeJS中从零使用Protobuf

  • 统计B站番剧真实评分
    统计B站番剧真实评分

  • 基础可视化图表之分组条形图
    基础可视化图表之分组条形图

  • 天天消息!RHEL/CentOS yum 源问题
    天天消息!RHEL/CentOS yum 源问题

  • 记 对接拼多多官方代报 辽宁电子口岸联达通客户端 ic卡加签版
    记 对接拼多多官方代报 辽宁电子口岸联达通客户端 ic卡加签版

  • 天天视讯!透过现象看本质,我找到了Netty粘包与半包的这几种解决方案。
    天天视讯!透过现象看本质,我找到了Netty粘包与半包的这几种解决方案。

  • 环球速看:从菜鸟到团队协同大神:产品经理工具技能修炼
    环球速看:从菜鸟到团队协同大神:产品经理工具技能修炼

  • 当前聚焦:DTALK直播预约 | 金融行业嘉宾分享:金融机构数据治理实践路径
    当前聚焦:DTALK直播预约 | 金融行业嘉宾分享:金融机构数据治理实践路径

  • 视焦点讯!ZooKeeper 避坑实践:SnapCount 设置不合理导致磁盘爆满,服务不可用
    视焦点讯!ZooKeeper 避坑实践:SnapCount 设置不合理导致磁盘爆满,服务不可用

  • 快看点丨修改NuGet包默认存放位置
    快看点丨修改NuGet包默认存放位置

  • 环球快消息!AcWing1174. 受欢迎的牛
    环球快消息!AcWing1174. 受欢迎的牛

  • 『JNPF』低代码创新赋能数字经济建设
    『JNPF』低代码创新赋能数字经济建设

  • 微信支付--JSAPI支付(微信小程序和微信公众号支付都可以采用该方式)
    微信支付--JSAPI支付(微信小程序和微信公众号支付都可以采用该方式)

  • 一本通动态规划篇解题报告
    一本通动态规划篇解题报告

  • 当前视讯!Python的保留字、标识符、变量的定义、常用数据类型、数据类型转换
    当前视讯!Python的保留字、标识符、变量的定义、常用数据类型、数据类型转换

  • 世界信息:CF13C. Sequence
    世界信息:CF13C. Sequence

  • 看点:设计模式简单介绍
    看点:设计模式简单介绍

  • 天天速看:写给大忙人看的Go语言快速指南(中文翻译)
    天天速看:写给大忙人看的Go语言快速指南(中文翻译)

  • 天天实时:[概率论与数理统计]笔记:2.2 随机变量的数字特征
    天天实时:[概率论与数理统计]笔记:2.2 随机变量的数字特征

  • Python:numpy模块最详细的教程
    Python:numpy模块最详细的教程

  • python3实现字符串的全排列的方法(无重复字符)两种解决方法
    python3实现字符串的全排列的方法(无重复字符)两种解决方法

  • 全球快播:python中可以处理word文档的模块:docx模块
    全球快播:python中可以处理word文档的模块:docx模块

  • 环球微资讯!Float value issue in GLSL
    环球微资讯!Float value issue in GLSL

  • 【环球热闻】事件总线 + 函数计算构建云上最佳事件驱动架构应用
    【环球热闻】事件总线 + 函数计算构建云上最佳事件驱动架构应用

  • MySQL——索引
    MySQL——索引

  • 全球关注:易基因|METTL3 通过调节m6A 修饰抑制口腔鳞状细胞癌安罗替尼敏感性 | 肿瘤研究
    全球关注:易基因|METTL3 通过调节m6A 修饰抑制口腔鳞状细胞癌安罗替尼敏感性 | 肿瘤研究

  • 环球今头条!苹果app怎么上架
    环球今头条!苹果app怎么上架

  • JS逆向实战10——某集团RSA长加密
    JS逆向实战10——某集团RSA长加密

  • WINDOWS文本编辑器丨EmEditor功能简介
    WINDOWS文本编辑器丨EmEditor功能简介

  • 【K哥爬虫普法】大数据风控第一案:从魔蝎科技案件判决,看爬虫技术刑事边界
    【K哥爬虫普法】大数据风控第一案:从魔蝎科技案件判决,看爬虫技术刑事边界

  • 简讯:通过持续交付提升发布效率
    简讯:通过持续交付提升发布效率

  • 三款免费强大的SSH工具食用指南
    三款免费强大的SSH工具食用指南

  • 焦点速递!Rpmbuild原码打包成rpm包
    焦点速递!Rpmbuild原码打包成rpm包

  • 微速讯:App在苹果上架难吗
    微速讯:App在苹果上架难吗

  • 今日快讯:IO、NIO、BIO傻傻分不清吗,让我对象告诉你~~
    今日快讯:IO、NIO、BIO傻傻分不清吗,让我对象告诉你~~

  • 今头条!尚硅谷Vue2.0+3.0的笔记资料(cli开始)
    今头条!尚硅谷Vue2.0+3.0的笔记资料(cli开始)

  • 天天消息!docx替换word属性打勾
    天天消息!docx替换word属性打勾

驱动网