【发布时间】:2019-03-31 00:07:11
【问题描述】:
在我的 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 时,我想触发此转换器,然后在我回写数据库时触发。请问您建议如何实现这一目标?
【问题讨论】:
-
“很遗憾,我不能使用强制类型,因为数据库中的所有内容都存储为 VARCHAR。” - 这并不能真正解释为什么不能使用强制类型。强制类型代码生成配置正是为您所考虑的目的而设计的。您介意解释一下您在这方面遇到的困难吗?
-
嗨,卢卡斯。我的意思是每个值(无论是数字还是文本)都作为 VARCHAR 存储在我正在使用的数据库中。因此,我不能使用强制类型,因为我不能将所有 VARCHAR 列转换为双精度,也不能使用表达式,因为没有关于哪些列是数字的模式。因此,这就是为什么我希望按照问题中的说明实现这一目标。
-
好吧,除非你告诉它,否则 jOOQ 怎么知道何时应用你的转换器? :)