json存数据库时处理器,jsonHandler/jsonArrayHandler

Posted Iversonstear

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了json存数据库时处理器,jsonHandler/jsonArrayHandler相关的知识,希望对你有一定的参考价值。

一、普通对象转Json

1、继承BaseTypeHandler

覆盖setNonNullParameter(),getNullableResult(),getNullableResult(),getNullableResult()方法

public class ObjectJsonHandler<T> extends BaseTypeHandler<T> {

    private Class<T> clazz;
  

   /**构造函数*/ public ObjectJsonHandler(Class<T> clazz) { if (clazz == null) { throw new IllegalArgumentException("Type argument cannot be null"); } this.clazz = clazz; } private NameFilter nameFilter = (object, name, value) -> name; /** * 设置非空参数 */ @Override public void setNonNullParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException { ps.setString(i, JSON.toJSONString(parameter, nameFilter)); } /** * 根据列名,获取可以为空的结果 */ @Override public T getNullableResult(ResultSet rs, String columnName) throws SQLException { String sqlJson = rs.getString(columnName); if (null != sqlJson) { return JSONObject.parseObject(sqlJson, clazz); } return null; } /** * 根据列索引,获取可以为空的结果 */ @Override public T getNullableResult(ResultSet rs, int columnIndex) throws SQLException { String sqlJson = rs.getString(columnIndex); if (null != sqlJson) { return JSONObject.parseObject(sqlJson, clazz); } return null; } @Override public T getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { String sqlJson = cs.getString(columnIndex); if (null != sqlJson) { return JSONObject.parseObject(sqlJson, clazz); } return null; } }

2、继承ObjectJsonHandler

/**
 * @Author jijiecong
 * @Date 2021/4/20 11:49
 * @Version 1.0
 * @Description 评价扩展字段json处理器
 */
public class EvaluationAttributesJsonHandler extends ObjectJsonHandler<EvaluationAttributesEntity> {

    public EvaluationAttributesJsonHandler() {
        super(EvaluationAttributesEntity.class);
    }

}

 

二、List对象转JsonArray

1、继承BaseTypeHandler

覆盖setNonNullParameter(),getNullableResult(),getNullableResult(),getNullableResult()方法

**
 * ObjectJsonArrayHandler
 * JSONArray处理类
 *
 * @version v1.0.0
 * @date 2020/7/23
 */
public class ObjectJsonArrayHandler<T>  extends BaseTypeHandler<List<T>> {

    private final Class<T> clazz;

    public ObjectJsonArrayHandler(Class<T> clazz) {
        if (clazz == null) {
            throw new IllegalArgumentException("Type argument cannot be null");
        } else {
            this.clazz = clazz;
        }
    }

    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, List<T> ts, JdbcType jdbcType) throws SQLException {
        ps.setString(i, JSONArray.toJSONString(ts));
    }

    @Override
    public List<T> getNullableResult(ResultSet rs, String s) throws SQLException {
        String jsonArrayStr = rs.getString(s);
        if (null != jsonArrayStr) {
            return JSONArray.parseArray(jsonArrayStr).toJavaList(clazz);
        }
        return null;
    }

    @Override
    public List<T> getNullableResult(ResultSet rs, int i) throws SQLException {
        String jsonArrayStr = rs.getString(i);
        if (null != jsonArrayStr) {
            return JSONArray.parseArray(jsonArrayStr).toJavaList(clazz);
        }
        return null;
    }

    @Override
    public List<T> getNullableResult(CallableStatement cs, int i) throws SQLException {
        String jsonArrayStr = cs.getString(i);
        if (null != jsonArrayStr) {
            return JSONArray.parseArray(jsonArrayStr).toJavaList(clazz);
        }
        return null;
    }
}

2、继承ObjectJsonArrayHandler

/**
 * StringJsonArrayHandler
 *
 * @version v1.0.0
 * @date 2020/8/11
 */
public class StringJsonArrayHandler extends ObjectJsonArrayHandler<String> {

    public StringJsonArrayHandler(Class<String> clazz) {
        super(String.class);
    }
}

 

以上是关于json存数据库时处理器,jsonHandler/jsonArrayHandler的主要内容,如果未能解决你的问题,请参考以下文章

Python用json模块时怎么才能用dump存数据时自动换行呢

redis怎么存数组和获取数组?

python json及mysql——读取json文件存sql数据库日期类型转换终端操纵mysql及python codecs读取大文件问题

php存入数据库 如何将json格式的数据直接存入mysql数据库

js中json处理总结之JSON.parse

8简单的多线程爬取网页数据 并通过xpath解析存到本地