一、TypeHander介绍
typeHander就是mybatis处理Java类型和Jdbc类型时转换策略。mybatis在查询设置参数和从查询结果映射到Java类型时会调用相应的typeHander的方法完成转换。这里我写了一个小demo以完成自定义List到数据库的转换关系,mybatis自动注册了很多typeHander,比如Java中的基本类型,包装类型,mybatis都为我们注册了,当我们不指定具体的typeHander时,mybatis会自动选择合适的typeHander以完成java类型和jdbc类型的相互转换。
二、过程
1.首先创建List的TypeHander
/**
* @author chenzhicong
* @time 2019/8/13 20:37
* @description
*/
public class ListTypeHandler extends BaseTypeHandler<List<String>> {
@Override
public void setNonNullParameter(PreparedStatement ps, int i, List<String> parameter, JdbcType jdbcType) throws SQLException {
if (jdbcType == null) {
ps.setString(i, StringUtils.collectionToCommaDelimitedString(parameter));
} else {
ps.setObject(i, parameter, jdbcType.TYPE_CODE);
}
}
@Override
public List<String> getNullableResult(ResultSet rs, String columnName) throws SQLException {
String s = rs.getString(columnName);
return s==null ? null : new ArrayList<String>(Arrays.asList(s.split(",")));
}
@Override
public List<String> getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
String s = rs.getString(columnIndex);
return s==null ? null : new ArrayList<>(Arrays.asList(s.split(",")));
}
@Override
public List<String> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
String s = cs.getString(columnIndex);
return s==null ? null : new ArrayList<>(Arrays.asL