mybatis 自定义 BaseTypeHandler 查询不起作用。

定义 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);没有进入。

img

查看BaseTypeHandler是否注册成功,在使用的方法上启用debug模式,跟踪下代码流程,参考如下链接:
https://juejin.cn/post/6844904004749787144

排查一下写法,版本有没有什么问题呢

确认 TypeHandler 有没有成功注册,然后 JdbcType 可以改成 VARCHAR,如果还是没有走到断点,可以在接口方法上打断点,看到底用的哪个 TypeHandler