美文网首页
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