场景,在mybatis xml 中的sql 返回字符串'true','false'
在java 实体中用boolean 字段接收,会导致的异常 Fail to convert to internal representation
解决方法:
第一步:编写一个转换的处理器
package com.XXX.XXX.common.utils;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class BooleanTypeHandler implements TypeHandler {
@Override
public void setParameter(PreparedStatement preparedStatement, int i, Object o, JdbcType jdbcType) throws SQLException {
Boolean b = (Boolean) o;
String value = (Boolean) b == true ? "true" : "false";
preparedStatement.setString(i, value);
}
@Override
public Object getResult(ResultSet resultSet, String s) throws SQLException {
String str = resultSet.getString(s);
Boolean rt = Boolean.FALSE;
if (str.toLowerCase().equalsIgnoreCase("true")){
rt = Boolean.TRUE;
}
return rt;
}
@Override
public Object getResult(ResultSet resultSet, int i) throws SQLException {
return null;
}
@Override
public Object getResult(CallableStatement callableStatement, int i) throws SQLException {
Boolean b = callableStatement.getBoolean(i);
return b == true ? "true" : "false";
}
}
第二步:在mybatis-config.xml中注册这个处理器
第三步:在xml 中指定返回类型
类似上面的isParent字段
OK,解决问题,有什么不懂的可私信咨询