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

3.4.0

该问题是如何引起的?(确定最新版也有问题再提!!!)

1.Postgresql中定义字段name text[]
2.po的字段 List<String> name,并设置@TableField(typeHandler = PgStringListTypeHandler.class)
3.调用mapper的selelctList(QueryWrapper<Po>),返回的name字段值为空,但数据库该字段有值,PgStringListTypeHandler.getResult打断点显示没有调用,@TableField(typeHandler = PgStringListTypeHandler.class,jdbcType=Array.class)也不行

PgStringListTypeHandler.class

@MappedJdbcTypes(JdbcType.ARRAY)
@MappedTypes(List.class)
public class PgStringListTypeHandler implements TypeHandler<List<String>> {
    @Override
    public void setParameter(PreparedStatement preparedStatement, int i, List<String> longs, JdbcType jdbcType) throws SQLException {
        if (longs != null) {
            preparedStatement.setArray(i, preparedStatement.getConnection().createArrayOf("text",longs.toArray()));
        } else {
            preparedStatement.setObject(i, null);
        }

    }


    @Override
    public List<String> getResult(ResultSet resultSet, String s) throws SQLException {
        Array object = resultSet.getArray(s);
        if (object == null) {
            return null;
        } else {
            return Arrays.asList((String[]) object.getArray());
        }
    }

    @Override
    public List<String> getResult(ResultSet resultSet, int i) throws SQLException {
        Array object = resultSet.getArray(i);
        if (object == null) {
            return null;
        } else {
            return Arrays.asList((String[]) object.getArray());
        }
    }

    @Override
    public List<String> getResult(CallableStatement callableStatement, int i) throws SQLException {
        Array object = callableStatement.getArray(i);
        if (object == null) {
            return null;
        } else {
            return Arrays.asList((String[]) object.getArray());
        }
    }
}

重现步骤(如果有就写完整)

报错信息

Comment From: miemieYaho

你看 TableField#typeHandler 上面的源码注释

Comment From: idlesysman

谢谢!