当前使用版本(必填,否则不予处理)
3.4.1
该问题是如何引起的?(确定最新版也有问题再提!!!)
复杂多表查询使用了DTO,在DTO的字段上定义@TableField(typeHandler = StringToListHandler.class)来实现转换不起作用。
重现步骤(如果有就写完整)
@MappedTypes(value = {List.class})
@MappedJdbcTypes(value = JdbcType.VARCHAR)
public class StringToListHandler extends BaseTypeHandler<List<Long>> {
String split = ",";
@Override
public void setNonNullParameter(PreparedStatement ps, int i, List<Long> parameter, JdbcType jdbcType)
throws SQLException {
ps.setString(i, StrUtil.join(split, parameter));
}
@Override
public List<Long> getNullableResult(ResultSet rs, String columnName) throws SQLException {
String reString = rs.getString(columnName);
if (reString != null && reString.length() > 0) {
String[] arrs = reString.split(split);
List<Long> idList = new ArrayList<>(arrs.length);
for (String id : arrs) {
if (id != null && id.length() > 0) {
idList.add(Long.valueOf(id));
}
}
return idList;
}
return null;
}
@Override
public List<Long> getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
String reString = rs.getString(columnIndex);
if (reString != null && reString.length() > 0) {
String[] arrs = reString.split(split);
List<Long> idList = new ArrayList<>(arrs.length);
for (String id : arrs) {
if (id != null && id.length() > 0) {
idList.add(Long.valueOf(id));
}
}
return idList;
}
return null;
}
@Override
public List<Long> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
String reString = cs.getString(columnIndex);
if (reString != null && reString.length() > 0) {
String[] arrs = reString.split(split);
List<Long> idList = new ArrayList<>(arrs.length);
for (String id : arrs) {
if (id != null && id.length() > 0) {
idList.add(Long.valueOf(id));
}
}
return idList;
}
return null;
}
}
报错信息
得不到预期值
Comment From: miemieYaho
不支持
Comment From: zuozhiwen
不支持
想请教一下为什么不支持?自定义TypeHandler感觉还是挺有用的,另外mybatis-plus本身自带的JacksonTypeHandler也都能奏效,主要我觉得一个原因是,加包扫描之后变成全局的了(会全局影响其他的类型),而像JacksonTypeHandler其实是针对有注解的类进行特定的转换的
Comment From: miemieYaho
底层是mybatis,提供的注解也只是在mybatis支持范围内进行的操作
Comment From: zuozhiwen
底层是mybatis,提供的注解也只是在mybatis支持范围内进行的操作
ok,感谢。那应该是我的issue提错了地方。主要有个地方让我比较纳闷的,JacksonTypeHandler的作用域是正常的,但是自定义的Handler完全没有解析到,我当时理解为MybatisPlus没有进行额外的扫描,当然应该也可能是底层用了Mybatis,Mybatis自己没有去做处理。