b_xinjun1120 2022-03-21 16:21 采纳率: 0%
浏览 1254
已结题

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

  • 写回答

3条回答 默认 最新

  • 一起随缘 2022-03-28 11:17
    关注
    获得0.60元问题酬金

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

    评论

报告相同问题?

问题事件

  • 系统已结题 3月29日
  • 赞助了问题酬金5元 3月21日
  • 修改了问题 3月21日
  • 创建了问题 3月21日