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