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

Java 使用转换器将jOOQ记录转换为POJO,java,pojo,jooq,Java,Pojo,Jooq,在我的Oracle数据库中,我的amount值存储为VARCHAR。在从数据库检索记录时,我希望将它们映射到一个POJO,其中金额值表示为double。不幸的是,我不能使用强制类型,因为在数据库中,所有内容都存储为VARCHAR,并且没有将列标识为包含amount值的列的模式 我正在看那张照片,这似乎是我想要的。因此,我为此创建了一个jOOQ转换器: public class DoubleConverter implements Converter<String, Double> {

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

我正在看那张照片,这似乎是我想要的。因此,我为此创建了一个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;
    }

}
公共类DoubleConverter实现转换器{
@凌驾
公共双精度源(字符串stringValue){
返回新的Double(stringValue);
}
@凌驾
公共字符串到(双精度){
DecimalFormat df=新的DecimalFormat();
df.setMinimumFractionDigits(0);
df.setGroupingUsed(假);
返回df.format(doubleValue);
}
@凌驾
公共类fromType(){
返回字符串.class;
}
@凌驾
公共类toType(){
返回Double.class;
}
}

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

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

您的
记录
将只包含
字符串
值,您的
MyClass
类将包含匹配的
double
属性。jOOQ将自动从
String
转换为
double
,反之亦然。默认情况下,将应用和

您可以通过指定新的
RecordMapperProvider
RecordUnmapperProvider
来覆盖它们,如下所述:


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

“不幸的是,我不能使用强制类型,因为在数据库中,所有内容都存储为VARCHAR。”-这并不能真正解释为什么不能使用强制类型。强制类型代码生成配置正是为您所想的目的而设计的。你能解释一下你在这方面的困难吗?嗨,卢卡斯。我的意思是,在我使用的数据库中,每个值(无论是数字还是文本)都存储为VARCHAR。因此,我不能使用强制类型,因为我不能将所有VARCHAR列转换为double并使用表达式,因为没有关于哪些列是数字的模式。因此,这就是我希望实现问题中所解释的目标的原因。那么,除非您告诉jOOQ,否则jOOQ如何知道何时应用您的转换器呢?:)