当前使用版本(必填,否则不予处理)

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自己没有去做处理。