Mybatis 直接存储JSONObject类型

发布时间:2024年01月19日

在 MyBatis 中,可以使用?org.apache.ibatis.type.JsonTypeHandler?来处理 JSONObject 类型的数据。

首先需要创建自定义的 TypeHandler,该 Handler 将会负责将 Java 对象转换为 JSONObject 并进行持久化操作。下面是一个示例的 TypeHandler 代码:

import org.apache.ibatis.type.*;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
 
@MappedTypes(JSONObject.class) // 指定映射的目标类型为 JSONObject
public class JsonTypeHandler extends BaseTypeHandler<JSONObject> {
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, JSONObject parameter, JdbcType jdbcType) throws SQLException {
        String jsonString = JSON.toJSONString(parameter);
        ps.setString(i, jsonString);
    }
    
    @Override
    public JSONObject getNullableResult(ResultSet rs, String columnName) throws SQLException {
        return parseJson(rs.getString(columnName));
    }
    
    @Override
    public JSONObject getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        return parseJson(rs.getString(columnIndex));
    }
    
    @Override
    public JSONObject getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        return parseJson(cs.getString(columnIndex));
    }
    
    private JSONObject parseJson(String jsonString) {
        if (jsonString == null || "".equals(jsonString)) {
            return new JSONObject();
        } else {
            return JSON.parseObject(jsonString);
        }
    }
}

现在就可以在 Mapper XML 或者注解中直接使用 JSONObject 了。例如,Mapper XML 中的写法如下所示:

<!-- 定义参数类型为 JSONObject -->
<insert id="saveData" parameterType="com.alibaba.fastjson.JSONObject">
   INSERT INTO table_name (data) VALUES (#{data})
</insert>

文章来源:https://blog.csdn.net/u012632105/article/details/135697453
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。