美文网首页
MySQL JSON格式数据应用

MySQL JSON格式数据应用

作者: 走码人 | 来源:发表于2021-10-25 09:34 被阅读0次

1、创建数据库表

指定类型为json类型

CREATE TABLE `table_json_data` (
  `id` varchar(32) NOT NULL COMMENT '编码',
  `obj_data` json DEFAULT NULL COMMENT 'json数据',
  PRIMARY KEY (`id`)
) 

2、mybatis配置文件设置

指定typeHandler为FastJsonTypeHandler,其中FastJsonTypeHandler为自定义类型解析类

<resultMap id="BaseResultMap"
        type="com.test.TableJsonData">
        <result column="id" property="id" />
        <result column="obj_data" property="objData"
            javaType="java.lang.Object"
            typeHandler="com.mybatis.typeHandler.FastJsonTypeHandler" />
    </resultMap>

FastJsonTypeHandler实现类demo如下

public class FastJsonTypeHandler<T extends Object> implements TypeHandler<T> {
    private Class<T> type;

    public FastJsonTypeHandler(Class<T> type) {
        if (type == null) {
            throw new IllegalArgumentException("Type argument cannot be null");
        }
        // 拿到xml中配置的javaType
        this.type = type;
    }

    @Override
    public void setParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException {
        ps.setString(i, parseJsonString(parameter));
    }

    @Override
    public T getResult(ResultSet rs, String columnName) throws SQLException {
        return parseJavaObject(rs.getString(columnName));
    }

    @Override
    public T getResult(ResultSet rs, int columnIndex) throws SQLException {
        return parseJavaObject(rs.getString(columnIndex));
    }

    @Override
    public T getResult(CallableStatement cs, int columnIndex) throws SQLException {
        return parseJavaObject(cs.getString(columnIndex));
    }

    /**
     * 转换成json字符串
      * @param parameter 参数
      * @return String json格式字符串
     */
    private String parseJsonString(T parameter) {
        if (parameter == null) {
            return null;
        }
        // 将参数转换成fastjson格式的文本
        return JSON.toJSONString(parameter);
    }

    @SuppressWarnings("unchecked")
    private T parseJavaObject(String parameter) {
        if (parameter == null) {
            return null;
        }
        if (parameter.startsWith("[")) {
            return (T)JSON.parseArray(parameter, this.type);
        }
        return JSON.parseObject(parameter, this.type);
    }

}

3、查询JSON类型

-- 查询记录
SELECT sname,JSON_EXTRACT(info,'$.age') FROM table_json_data;
SELECT sname,info->'$.age' FROM table_json_data;
-- 查询key
SELECT id,json_keys(info) FROM table_json_data;

相关文章

网友评论

      本文标题:MySQL JSON格式数据应用

      本文链接:https://www.haomeiwen.com/subject/ziiwmltx.html