首页 > 数据库 >mybatis使用postgresql中的jsonb数据类型

mybatis使用postgresql中的jsonb数据类型

时间:2023-01-05 21:01:49浏览次数:45  
标签:postgresql jsonb Object 数据类型 JSON 使用 mybatis

  最近新开发的一个功能使用到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

标签:postgresql,jsonb,Object,数据类型,JSON,使用,mybatis
From: https://www.cnblogs.com/yilangcode/p/17028840.html

相关文章

  • Go语言的复合数据类型struct,array,slice,map
    1、结构体struct定义格式:type结构体名称struct{属性1类型属性2类型...}结构体的初始化可以使用new关键词和var关键词,不同的是如果使用new,则返......
  • postgresql/lightdb的 is distinct from、is not distinct from
    在postgresql/lightdb开发过程中有时会用到is distinct from和isnotdistinctfrom这个功能。isdistinctfrom功能描述A和B的数据类型、值不完全相同返回tru......
  • mybatis-plus逻辑删除不起作用
    @TableField(value="stateflag")@ApiModelProperty(value="")@TableLogic(value="0",delval="1")privateStringstateflag;字段添加如上注解并......
  • Mybatis Plus 执行sql server 存储过程
    Mapper.javaStringgetRealName(StringuserName);多租户模式下,需要加注解@InterceptorIgnore(tenantLine="true")@InterceptorIgnore(tenantLine="true")Stri......
  • MyBatis的相应API与传统和代理开发的Dao层实现
    MyBatis的相应API1、SqlSession工厂构建器SqlSessionFactoryBuilder常用API:SqlSessionFactorybuild(InputStreaminputStream)通过加载mybatis的核心文件的输入流的形式构......
  • mybatis模糊查询
    1.第一种使用likeconcat<selectid="selectLogininforList"parameterType="SysLogininfor"resultMap="SysLogininforResult"> selectinfo_id,user_name,ipaddr,log......
  • postgresql/lightdb OVERLAPS 和 BETWEEN SYMMETRIC函数介绍
    PostgreSql/lightdb中有两个非常方便、有用的比较操作,OVERLAPS和BETWEENSYMMETRIC。1.OVERLAPS(重叠)OVERLAPS操作,用于检测两个日期范围是否重叠。举例:SELECT(......
  • postgresql/lightdb中覆盖自增列值
    PostgreSQL里的自动生成标识列identitycolumn和自动生成存储列generatedcolumn是非常不错的功能,不过他们的实现语法比较近似,容易弄混,本文将进行示例介绍。PGv10:......
  • python组合数据类型(容器数据类型)
    全!python组合数据类型(容器类型)组合数据类型为python解释器中内置的标准类型,包含组合数据类型在内的内置标准类型有:数字、序列、映射、类等等序列类型三种基本序列类......
  • SpringBoot中mybatis的相关配置
    mybatis配置mybatis:#别名,在mybatis的mapper中可以直接使用同名来代替包名type-aliases-package:com.mao.springcloud.pojo#config-location:classpath:myba......