定义 ArrayJsonHandler
@MappedTypes(JSONArray.class)
@MappedJdbcTypes(JdbcType.OTHER)
public class ArrayJsonHandler extends BaseTypeHandler<JSONArray> {
//设置非空参数
@Override
public void setNonNullParameter(PreparedStatement ps, int i, JSONArray parameter, JdbcType jdbcType) throws SQLException {
ps.setString(i, String.valueOf(parameter.toJSONString()));
}
//根据列名,获取可以为空的结果
@Override
public JSONArray getNullableResult(ResultSet rs, String columnName) throws SQLException {
System.out.println(columnName);
String sqlJson = rs.getString(columnName);
if (null != sqlJson){
return JSONArray.parseArray(sqlJson);
}
return null;
}
//根据列索引,获取可以为空的结果
@Override
public JSONArray getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
String sqlJson = rs.getString(columnIndex);
if (null != sqlJson){
return JSONArray.parseArray(sqlJson);
}
return null;
}
@Override
public JSONArray getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
String sqlJson = cs.getString(columnIndex);
if (null != sqlJson){
return JSONArray.parseArray(sqlJson);
}
return null;
}
}
定义 mapper
<result column="imgs" property="imgs" jdbcType="OTHER" typeHandler="com.xxx.xxx.ArrayJsonHandler"/>
增删改都没问题 查询为null,断点 System.out.println(columnName);没有进入。
查看BaseTypeHandler是否注册成功,在使用的方法上启用debug模式,跟踪下代码流程,参考如下链接:
https://juejin.cn/post/6844904004749787144
排查一下写法,版本有没有什么问题呢
确认 TypeHandler 有没有成功注册,然后 JdbcType 可以改成 VARCHAR,如果还是没有走到断点,可以在接口方法上打断点,看到底用的哪个 TypeHandler