当前位置: 首页 > article >正文

mybatis+postgresql,无感读写json字段

1.实体类中字段类型

import com.alibaba.fastjson.JSONObject;

@Data
public class TestDto {

    private String name;


    //对应数据库的JSON字段
    private JSONObject page_detail;

}

2.自定义实现typeHandler

package base.utils;

import com.alibaba.fastjson.JSONObject;
import org.apache.ibatis.type.*;

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


@MappedTypes(JSONObject.class)
@MappedJdbcTypes(JdbcType.VARCHAR)
public class JsonTypeHandler extends BaseTypeHandler<JSONObject>{

     /**
     * 设置非空参数
     * @param ps
     * @param i
     * @param parameter
     * @param jdbcType
     * @throws SQLException
     */
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, JSONObject parameter, JdbcType jdbcType) throws SQLException {
        ps.setString(i,String.valueOf(parameter.toJSONString()));
    }
    /**
     * 根据列名,获取可以为空的结果
     * @param rs
     * @param columnName
     * @return
     * @throws SQLException
     */
    @Override
    public JSONObject getNullableResult(ResultSet rs, String columnName) throws SQLException {
        String sqlJson = rs.getString(columnName);
        if (null != sqlJson) {
            return JSONObject.parseObject(sqlJson);
        }
        return null;
    }
    /**
     * 根据列索引,获取可以为内控的接口
     * @param rs
     * @param columnIndex
     * @return
     * @throws SQLException
     */
    @Override
    public JSONObject getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        String sqlJson = rs.getString(columnIndex);
        if (null != sqlJson) {
            return JSONObject.parseObject(sqlJson);
        }
        return null;
    }
    /**
     *
     * @param cs
     * @param columnIndex
     * @return
     * @throws SQLException
     */
    @Override
    public JSONObject getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        String sqlJson = cs.getNString(columnIndex);
        if (null != sqlJson) {
            return JSONObject.parseObject(sqlJson);
        }
        return null;
    }

}

3.SQL文件

<insert id="addTest">
        insert into test (name,page_detail)
            values (#{name},#{page_detail})
</insert>

4.修改配置文件

4.1 mybatis-spring-boot-starter

由于mybatis-spring-boot-starter可无需Mybatis配置文件,可直接在项目配置文件application.properties中进行配置

#指定类型处理器的所在包的路径
mybatis.type-handlers-package=base.utils

4.1 mybatis-spring

mybatis-spring则在mybatis-config.xml中增加typeHandler 

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        //略...
    </settings>
    <typeAliases>
        //略...
    </typeAliases>
    <typeHandlers>
        <typeHandler handler="base.utils.JsonTypeHandler"/>
    </typeHandlers>
</configuration>

5.JDBC URL 增加配置

#jdbc增加配置stringtype=unspecified
spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/test?stringtype=unspecified


http://www.kler.cn/a/387020.html

相关文章:

  • 多进程/线程并发服务器
  • 探索Python的HTTP利器:Requests库的神秘面纱
  • 【go从零单排】JSON序列化和反序列化
  • 什么岗位需要学习 OpenGL ES ?说说 3.X 的新特性
  • 普通电脑上安装属于自己的Llama 3 大模型和对话客户端
  • WebRTC API分析
  • Docker 中部署 SQL Server
  • OSPF(Open Shortest Path First,开放式最短路径优先)动态路由介绍
  • 分析Element Plus UI 中 mt-x 类的基本知识
  • Axure设计之三级联动选择器教程(中继器)
  • [网络架构设计师论文] ‌论企业云数据中心安全防范技术
  • 【linux】再谈网络基础(二)
  • 使用EasyExcel实现excel导入
  • 31.7K+ Star!AgentGPT:一个在浏览器中运行的Agent
  • 全排列(DFS)
  • 【MIT-OS6.S081笔记1】Chapter1阅读摘要:Operating system interfaces
  • Spring Boot的过滤器与拦截器的区别
  • 【C++ 滑动窗口】2134. 最少交换次数来组合所有的 1 II
  • Anaconda安装和环境配置教程(2024年11月9日)
  • Kafka 之事务消息
  • GJ Round (2024.10) Round 8~21
  • 鸿蒙多线程开发——Worker多线程
  • 安全见闻(网络安全篇)
  • Python爬虫如何处理验证码与登录
  • Python练习15
  • Qt 无法获取调试输出