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

3.4.2

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

mybaits-plus 在使用clickhouse时,查询结果存在2个问题: 1. 实体对象不支持类型: LocalDate和LocalDateTime; 2. 多表关系查询时,由于clickhouse-jdbc返回字段是t1.xx1, t1.xx2, t2.xxx1,t2.xxx2 这种带有表别名的字段,导致和实体对象映射不上,mybatis-plus能否支持一下这个功能? 现在的做法是 每个字段都使用 AS 关键字,把表别名去除!很繁琐!

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

报错信息

Comment From: spirit-unpredictable

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

3.4.2

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

mybaits-plus 在使用clickhouse时,查询结果存在2个问题:

  1. 实体对象不支持类型: LocalDate和LocalDateTime;
  2. 多表关系查询时,由于clickhouse-jdbc返回字段是t1.xx1, t1.xx2, t2.xxx1,t2.xxx2 这种带有表别名的字段,导致和实体对象映射不上,mybatis-plus能否支持一下这个功能? 现在的做法是 每个字段都使用 AS 关键字,把表别名去除!很繁琐!

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

报错信息

第一个问题,确定不是数据源框架的问题吗,我用低版本druid出现过

Comment From: miemieYaho

数据封装去找mybatis

Comment From: gao1399677

最新版这个不支持并非mybatis与 mybatis-plus的锅, 问题应该是在clickhouse-jdbc上作者说v0.3.0会修复 可以看下这个issue

Comment From: linwaiwai

how to solve the first problem ?

Use custom TypeHandler .

@Bean
    public MybatisPlusPropertiesCustomizer mybatisPlusPropertiesCustomizer() {
        return properties -> {
            DynamicMybatisConfiguration configuration = new DynamicMybatisConfiguration();
            configuration.getTypeHandlerRegistry().register(ClickHouseLocalDateTimeTypeHandler.class);
            properties.setConfiguration(configuration);
        };
    }

@MappedTypes(LocalDateTime.class)
public class ClickHouseLocalDateTimeTypeHandler extends BaseTypeHandler<LocalDateTime> {

    private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, LocalDateTime parameter, JdbcType jdbcType) throws SQLException {
        if (SqlUtils.isClickHouse()){
            ps.setString(i,    parameter.format(FORMATTER));
        } else {
            ps.setTimestamp(i, Timestamp.valueOf(parameter));
        }

    }

    @Override
    public LocalDateTime getNullableResult(ResultSet rs, String columnName) throws SQLException {
            Timestamp timestamp = rs.getTimestamp(columnName);
            return getLocalDateTime(timestamp);
    }

    @Override
    public LocalDateTime getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
            Timestamp timestamp = rs.getTimestamp(columnIndex);
            return getLocalDateTime(timestamp);

    }

    @Override
    public LocalDateTime getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
            Timestamp timestamp = cs.getTimestamp(columnIndex);
            return getLocalDateTime(timestamp);
    }

    private static LocalDateTime getLocalDateTime(Timestamp timestamp) {
        return timestamp != null ? timestamp.toLocalDateTime() : null;
    }
}

Comment From: github24518

这是来自QQ邮箱的假期自动回复邮件。你好,我最近正在休假中,无法亲自回复你的邮件。我将在假期结束后,尽快给你回复。