在我的Oracle数据库中,我有存储为VARCHAR的金额值。当从数据库检索记录时,我希望将它们映射到一个POJO,在POJO中,金额值表示为double。不幸的是,我不能使用强制类型,因为在数据库中,所有的东西都存储为VARCHAR,而且没有任何模式将列标识为包含一个amount值的列。
我正在看一看jOOQ变换器,这似乎是我想要的。因此,我为此创建了一个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时,我希望触发这个转换器,然后每当我写回数据库时触发该转换器。请您推荐如何实现这一目标?
发布于 2018-10-26 11:02:21
虽然我强烈建议您以某种方式在代码生成配置中获得所有双列的列表和强制类型配置,但在特定情况下,您不必做太多工作才能调用record.into(MyClass.class)。
record只包含String值,MyClass类将包含匹配的double属性。jOOQ将从String自动转换为double,反之亦然.默认情况下,将应用DefaultRecordMapper和DefaultRecordUnmapper。
您可以通过指定一个新的RecordMapperProvider和一个RecordUnmapperProvider来覆盖这些,如下所述:https://www.jooq.org/doc/latest/manual/sql-execution/fetching/pojos-with-recordmapper-provider
正确地做这件事需要做一些工作。
https://stackoverflow.com/questions/53005181
复制相似问题