mybatis使用postgresql中的jsonb数据类型
最近新开发的一个功能使用到postgresql中的jsonb数据类型。架构师可能考虑到这种数据格式更加便于存储json格式的数据,因此考虑使用这种数据类型。自己以前未曾使用过这种数据类型,因此需要现学现用。同事给我指点了一下,说这种数据类型可以当做字符串来处理。马上去搜索引擎中查找学习资料,看看这种数据类型的应用场景,以及如何使用这种数据类型。看了很多篇博文,认识到这种数据类型不能直接使用mybatis插入,需要单独使用转换类。自己试着按照网友提供的教程测试,发现可以正常新增数据。注意事项:需要使用JSON.toJSONString()方法将需要处理的数据进行转换,并且这种转换是在转换类中完成的。
转换类的示例代码如下:
@MappedTypes({Object.class})
public class JsonbTypeHandler extends BaseTypeHandler<Object> {
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<String> dataList = JSON.parseArray(JSON.toJSONString(Object类型的数据), String.class);
这样就可以获取到页面中传入的JSON数组数据,然后在做进一步的处理即可。第二种情况,如果是已经保存到数据库中的数据,则直接使用JSON.parseArray()进行转换即可,不需要其他操作。示例代码如下:
List<String> dataList = JSON.parseArray(数据库中的数据.toString(), String.class);
测试过程中,解析json数据遇到的一些问题,主要就是转换错误的问题。经过反反复复的尝试,最终才确定下来如何进行转换,如何进行解析。已经部署在测试环境中正常运行,各种功能都正常,即将发布新版本,到此功能完成。
参考博文:
https://www.cnblogs.com/liangyy/p/13573043.html
mybatis使用postgresql中的jsonb数据类型的更多相关文章
- PostgreSQL 中定义自己需要的数据类型
PostgreSQL解决某系数据库中的tinyint数据类型问题,创建自己需要的数据类型如下: CREATE DOMAIN tinyint AS smallint CONSTRAINT tinyint ...
- PostgreSQL中JSON、JSONB基本操作符
PostgreSQL 9.5以上的版本中有了很多方便的操作符,使得操作 JSON 变得非常方便了. 一. -> 和 ->> : -> 表示获取一个JSON数组元素,支持下标值( ...
- Postgresql中的数据类型大全
一.数值类型: 下面是PostgreSQL所支持的数值类型的列表和简单说明: 名字 存储空间 描述 范围 smallint 2 字节 小范围整数 -32768 到 +32767 integer 4 字 ...
- Mybatis使用- Mybatis JdbcType与Oracle、MySql数据类型对应列表 ; Mybatis中javaType和jdbcType对应关系
Mybatis JdbcType与Oracle.MySql数据类型对应列表 Mybatis JdbcType Oracle MySql JdbcType ARRAY JdbcType BIG ...
- golang自己定义数据类型查询与插入postgresql中point数据
golang自己定义数据类型查询与插入postgresql中point数据 详细代码例如以下: package main import ( "bytes" "databa ...
- 【转】Mybatis 3.1中 Mapper XML 文件 的学习详解
MyBatis 真正的力量是在映射语句中.这里是奇迹发生的地方.对于所有的力量,SQL 映射的 XML 文件是相当的简单.当然如果你将它们和对等功能的 JDBC 代码来比较,你会发现映射文件节省了大约 ...
- PostgreSQL 中日期类型转换与变量使用及相关问题
PostgreSQL中日期类型与字符串类型的转换方法 示例如下: postgres=# select current_date; date ------------ 2015-08-31 (1 row ...
- PostgreSQL学习手册(常用数据类型)
一.数值类型: 下面是PostgreSQL所支持的数值类型的列表和简单说明: 名字 存储空间 描述 范围 smallint 2 字节 小范围整数 -32768 到 +32767 integer ...
- PostgreSQL自学笔记:5 数据类型和运算符
5 数据类型和运算符 5.1 PostgreSQL 数据类型介绍 5.1.1 整数类型 整型类型 字节 取值范围 smallint 2字节 -2^15 ~ 2^15 int integer 4字节 - ...
- Mybatis调用PostgreSQL存储过程实现数组入参传递
注:本文来源于 < Mybatis调用PostgreSQL存储过程实现数组入参传递 > 前言 项目中用到了Mybatis调用PostgreSQL存储过程(自定义函数)相关操作,由于Pos ...
随机推荐
- SqlSugar新增数据
1.插入方式 1.1 单条插入实体 //返回插入行数 db.Insertable(insertObj).ExecuteCommand(); //都是参数化实现 //异步: await db.Inser ...
- 从零构建医疗领域知识图谱的KBQA问答系统:其中7类实体,约3.7万实体,21万实体关系。
从零构建医疗领域知识图谱的KBQA问答系统:其中7类实体,约3.7万实体,21万实体关系. 项目效果 以下两张图是系统实际运行效果: 1.项目运行方式 运行环境:Python3 数据库:neo4j 预 ...
- automapper 10 +autofac+asp.net web api
automapper 不必多说 https://automapper.org autofac 这里也不多说 https://autofac.org 这里主要 说 automapper 10.0 版本+ ...
- (python)学习ing||类学习,@property装饰器
class pers(): def __init__(self,hp): self._hp=hp @property def hp(self): return self._hp @hp.setter ...
- Raise发现
procedure TForm2.Button1Click(Sender: TObject); var MyWoKao: string; I: Integer; begin try try I := ...
- 好书推荐之JAVA并发编程扛鼎之作:《Java并发编程实战》、《Java并发编程的艺术》
(pdf文档下载见文末) 大佬推荐 <Java 并发编程实战>,是一本完美的 Java 并发参考手册. 书中从并发性和线程安全性的基本概念出发,介绍了如何使用类库提供的基本并发构建块,用于 ...
- JS leetcode 检查单词是否为句中其他单词的前缀 解题分析,活用startsWith方法
壹 ❀ 引 今天来做一道题目贼长,但做起来不难的题,为啥昨天前天没写呢,因为题目太简单了,没收获额外有用信息,已知的知识反复写就有些浪费时间了.今天的题目来自leetcode1455. 检查单词是否为 ...
- JS 页面离开事件 页面关闭事件,实现登录成功返回上个页面
壹 ❀ 引 登录成功后跳转到上一个页面是很常见的需求,比如在天猫添加购物车时网站会效验用户登录情况,若未登录则跳转登录,登录成功返回到先前的商品页. 这个功能实现并不困难,但因为我的奇思妙想让我先后了 ...
- java 从零开始手写 RPC (06) reflect 反射实现通用调用之客户端
通用调用 java 从零开始手写 RPC (01) 基于 socket 实现 java 从零开始手写 RPC (02)-netty4 实现客户端和服务端 java 从零开始手写 RPC (03) 如何 ...
- IPFS Gateway Selector IPFS下载网关选择工具
简介 用IPFS作文件分享可以覆盖很多场景, 现在IPFS网关也相当多了, 但是因为国内网络的状况, 不同网关在不同网络运营商的表现差别很大, 导致你提供的下载链接在对方那里可能速度很慢, 甚至无法访 ...