找不对自定义typeHandler:java.lang.IllegalStateException: No typehandler found for mapping ...
1、自定义typeHandler
package com.apollo.cloud.common.core.mybatis.typehandler;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
@MappedTypes({JSONObject.class})
@MappedJdbcTypes({JdbcType.VARCHAR})
public class JsonTypeHandler extends BaseTypeHandler {
@Override
public void setNonNullParameter(PreparedStatement ps, int i, JSONObject parameter,JdbcType jdbcType) throws SQLException {
ps.setString(i, JSONUtil.toJsonStr(parameter));
}
@Override
public JSONObject getNullableResult(ResultSet rs, String columnName)throws SQLException {
return JSONUtil.parseObj(rs.getString(columnName)).toBean(JSONObject.class);
}
@Override
public JSONObject getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
return JSONUtil.parseObj(rs.getString(columnIndex)).toBean(JSONObject.class);
}
@Override
public JSONObject getNullableResult(CallableStatement cs, int columnIndex)throws SQLException {
return JSONUtil.parseObj(cs.getString(columnIndex)).toBean(JSONObject.class);
}
}
2、配置包扫描
mybatis-plus: type-handlers-package: com.apollo.cloud.common.core.mybatis.typehandler
3、实体使用
import cn.hutool.json.JSONObject;
@Data
@TableName(value = "order")
@EqualsAndHashCode(callSuper = true)
@ApiModel
public class OrderInfo {
@TableField(typeHandler = JsonTypeHandler.class, jdbcType= JdbcType.VARCHAR)
private JSONObject payResponse;
}
4、问题原因:实体使用的类型和typeHandler中定义的不一致,类型修改一致问题解决
实体使用:
typeHandler定义: