postgreSql存储jsonb

news/2024/7/9 19:50:05 标签: postgresql, 数据库

postgreSQL 支持 json类型存储
使用异同如下:

1. 字段修改

1.1 修改前

字符串类型

 private String files;
 -- 数据库
 files varchar(511),
1.2 修改后

jsonArray 类型

@TableField(typeHandler = JsonArrayTypeHandler.class)
 private JSONArray files;
 -- 数据库
 files jsonb,

2. 查询修改

2.1 修改前

使用mybatisPlus 默认查询

Map map = new HashMap(CommonConstant.TWO);
map.put(CommonConstant.FBR_INFO_ID, fbrInfoId);
List<FBRHWInfoEntity> hwList = fbrhwInfoMapper.selectByMap(map);
2.2 修改后

需要自己写查询的mapper方法

List<FBRHWInfoEntity> hwList = fbrhwInfoMapper.getByFbrInfoId(fbrInfoId); 

mapper中 resultMap 的其余字段不用写

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxx.npi.module.fbr.mapper.FBRHWInfoMapper">
    <resultMap id="CurrentType" type="com.xxx.npi.module.fbr.po.FBRHWInfoEntity">
        <result column="files" javaType="com.alibaba.fastjson.JSONObject" property="files"
                typeHandler="com.xxx.platform.common.mybatis.JsonArrayTypeHandler"/>
    </resultMap>
    <select id="getByFbrInfoId" resultMap="CurrentType">
        select * from fbr_hw_info where fbr_info_id = #{param}
    </select>
</mapper>

3. 工具类

import com.alibaba.fastjson.JSONArray;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedTypes;
import org.postgresql.util.PGobject;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * @description: JsonArrayTypeHandler
 * @author: leiming5
 * @date: 2021-02-07 08:57
 */
@MappedTypes({JSONArray.class})
public class JsonArrayTypeHandler extends BaseTypeHandler<Object> {

    private static final PGobject jsonObject = new PGobject();

    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, Object o, JdbcType jdbcType) throws SQLException {
        jsonObject.setType("jsonb");
        jsonObject.setValue(o.toString());
        preparedStatement.setObject(i, jsonObject);
    }

    @Override
    public JSONArray getNullableResult(ResultSet resultSet, String columnName) throws SQLException {
        return JSONArray.parseArray(resultSet.getString(columnName));
    }

    @Override
    public JSONArray getNullableResult(ResultSet resultSet, int columnIndex) throws SQLException {
        return JSONArray.parseArray(resultSet.getString(columnIndex));
    }

    @Override
    public JSONArray getNullableResult(CallableStatement callableStatement, int columnIndex) throws SQLException {
        return JSONArray.parseArray(callableStatement.getString(columnIndex));
    }
}

http://www.niftyadmin.cn/n/5247434.html

相关文章

从视频中截取指定帧图片

前言&#xff1a; 我们在很多时候需要对视频文件进行分析&#xff0c;或者对视频产生缩略图。因此视频截取技术必不可少。 从本地文件中读取视频帧 导包 <dependency><groupId>org.jcodec</groupId><artifactId>jcodec</artifactId><versio…

Kotlin Lambda使用

Kotlin Lambda使用 fun main() /*: Unit*/ {// Lambda会慢慢的难度升级// Kotlin Unit Java void// TODO 下面全部都是函数声明&#xff0c; 既然是函数声明&#xff0c;就不能调用// 函数的声明 用lambda去描述函数的声明val method1 : () -> Unitval method2 : (Int, In…

Pinyin-pro的介绍、安装、使用

目录 拼音&#xff08;Pinyin-pro&#xff09;工具概述 拼音&#xff08;Pinyin-pro&#xff09;工具安装 拼音&#xff08;Pinyin-pro&#xff09;工具使用 拼音&#xff08;Pinyin-pro&#xff09;工具概述 "pinyin-pro" 是一个专业的 JavaScript 中文转拼音的库…

空中消防员:无人机森林防火应用全面升级

森林是生态系统的重要组成部分&#xff0c;也是人类得以生存的关键。我国森林面积广大&#xff0c;存在火灾频发的困境。提升森林火灾防控能力是维护生态平衡、保护资源和保障人民生命安全的必要步骤。随着无人机技术的发展&#xff0c;其在无人机森林防火中的应用为传统巡查工…

STL(三)(list篇)

1.list的定义和结构 list的使用频率不高,在做题时极少遇到需要使用list的情景list是一种双向链表容器,它是标准模板库(STL)提供的一种序列容器list容器以节点(node)的形式存储元素,并使用指针将这些节点链接在一起,形成一个链表结构 list容器的定义和结构如下: template<…

软件崩溃时Visual Studio中看不到有效的调用堆栈,使用Windbg动态调试去分析定位

目录 1、问题说明 2、使用Windbg查看崩溃时详细的函数调用堆栈

关于前端学习的思考-vertical-align的用法

先摆结论&#xff1a;vertical-align这里的top线&#xff0c;bottom线&#xff0c;middle线&#xff0c;baseline线是由最大宽度和最大高度的行内元素或行内块元素决定的。 按照惯例&#xff0c;先摆三个行内元素。 1、改变第一个盒子&#xff0c;vertical-align&#xff1a;to…

vscode 如何将正则匹配到的字符前批量加字符

最近想用vscode将正则匹配到的东西签名批量https&#xff0c;替换时可以用$1来替换正则匹配到的字符串&#xff0c;如下所示