使用转换器

时间:2018-10-26 09:04:26

标签: java pojo jooq

在我的Oracle数据库中,我有作为VARCHAR存储的数量值。从数据库检索记录时,我希望将它们映射到POJO,其中金额值表示为double。不幸的是,我无法使用强制类型,因为在数据库中所有内容都存储为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时都触发该转换器,然后每当我写回数据库时都触发该转换器。您如何建议实现这一目标?

1 个答案:

答案 0 :(得分:1)

虽然我强烈建议您以某种方式获取所有双列的列表,并在代码生成配置中应用强制类型配置,但在您的特殊情况下,您不必做很多事情就可以调用{{ 1}}。

您的record.into(MyClass.class)仅包含record值,而您的String类将包含匹配的MyClass属性。 jOOQ将自动从double转换为String,反之亦然。默认情况下,将应用DefaultRecordMapperDefaultRecordUnmapper

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

正确执行此操作会有点麻烦。