1、定义typeHandler类
package com.avris.strategy.common.handler;
import com.alibaba.fastjson.JSONObject;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
import org.apache.ibatis.type.TypeHandler;
@Slf4j
@MappedTypes(JSONObject.class)
@MappedJdbcTypes(JdbcType.VARCHAR)
public class JsonObjectTypeHandler implements
TypeHandler<JSONObject> {
@Override
public void setParameter(PreparedStatement ps, int i, JSONObject parameter,
JdbcType jdbcType) throws SQLException {
String value = parameter.toString();
if (jdbcType == null) {
ps.setObject(i, value);
} else {
ps.setObject(i, value, jdbcType.TYPE_CODE);
}
}
@Override
public JSONObject getResult(ResultSet rs, String columnName) throws SQLException {
String result = rs.getString(columnName);
return result == null ? null : JSONObject.parseObject(result);
}
@Override
public JSONObject getResult(ResultSet rs, int columnIndex) throws SQLException {
String result = rs.getString(columnIndex);
return result == null ? null : JSONObject.parseObject(result);
}
@Override
public JSONObject getResult(CallableStatement cs, int columnIndex) throws SQLException {
String result = cs.getString(columnIndex);
return result == null ? null : JSONObject.parseObject(result);
}
}
2、mybatis实体中指定typeHandler
@TableField(typeHandler = JsonObjectTypeHandler.class)
3、yml配置文件中注册typeHandler
mybatis-plus:
type-handlers-package: 包路径A,包路径B