使用转换器将 jOOQ 记录转换为 POJO

Converting jOOQ record to POJO using converter

在我的 Oracle 数据库中,我有存储为 VARCHAR 的金额值。从数据库中检索记录时,我希望将它们映射到一个 POJO,其中金额值表示为双精度值。不幸的是,我不能使用强制类型,因为在数据库中所有内容都存储为 VARCHAR,并且没有模式将列标识为包含金额值的列。

我正在看 jOOQ converters 好像是我想要的。因此,我为此创建了一个 jOOQ 转换器:

public class DoubleConverter implements Converter<String, Double> {

    @Override
    public Double from(String stringValue) {
        return new Double(stringValue);
    }

    @Override
    public String to(Double doubleValue) {
        DecimalFormat df = new DecimalFormat();
        df.setMinimumFractionDigits(0);
        df.setGroupingUsed(false);

        return df.format(doubleValue);
    }

    @Override
    public Class<String> fromType() {
        return String.class;
    }

    @Override
    public Class<Double> toType() {
        return Double.class;
    }

}

但是,每当我想使用 record.into(MyClass.class) 将数据库记录映射到我的 POJO 时,我想触发此转换器,然后在我写回数据库时触发回来。请问您建议如何实现这一目标?

虽然我强烈建议您以某种方式获取所有双列的列表并在您的代码生成配置中应用强制类型配置,但在您的特定情况下,您不必做太多事情就可以调用record.into(MyClass.class).

您的 record 将仅包含 String 值,您的 MyClass class 将包含匹配的 double 属性。 jOOQ 会自动从 String 转换为 double ,反之亦然。默认情况下,将应用 DefaultRecordMapper and DefaultRecordUnmapper

您可以通过指定新的 RecordMapperProviderRecordUnmapperProvider 来覆盖它们,如下所述: https://www.jooq.org/doc/latest/manual/sql-execution/fetching/pojos-with-recordmapper-provider

正确地做到这一点需要一些工作。