Java jOOQ select into POJO,仅为某些字段指定映射
我将jOOQ与普通SQL(不是生成的代码)一起使用。 我试图直接选择一个POJO,它有一些enum类型的字段Java jOOQ select into POJO,仅为某些字段指定映射,java,sql,enums,jooq,Java,Sql,Enums,Jooq,我将jOOQ与普通SQL(不是生成的代码)一起使用。 我试图直接选择一个POJO,它有一些enum类型的字段 MyType pojo = context.select().from(table("Table")) .where(field("ID").equal("1")).fetchOne() .into(MyType.class); 在我看来,我只能为我的整个POJO指定一个高级映射器,如下所示: MyType pojo = context.
MyType pojo = context.select().from(table("Table"))
.where(field("ID").equal("1")).fetchOne()
.into(MyType.class);
在我看来,我只能为我的整个POJO指定一个高级映射器,如下所示:
MyType pojo = context.select().from(table("Table"))
.where(field("ID").equal("1")).fetchOne()
.map(new RecordMapper<Record, MyType>() {
@Override
public MyType map(Record record) {
...
}
});
MyType pojo=context.select().from(表(“表”))
.where(field(“ID”).equal(“1”).fetchOne()
.map(新记录映射器(){
@凌驾
公共MyType映射(记录){
...
}
});
我找不到只为某些字段提供映射或转换器的方法。具体地说,我想告诉jooq类似于“正常转换所有字段,除非我的POJO中的字段是MyEnum类型,在这种情况下使用此映射(或转换器)”
如何为某些字段而不是其他字段指定映射器
顺便说一句,我注意到我可以在配置级别执行类似的操作,将数据库字段名与通配符(如上所述)匹配,但我认为最好由POJO中字段的类型来决定。有不同的方法来解决此问题: 1.使用代码生成器 很明显。我知道你没有使用它,但也许有人会发现这个问题。在这种情况下,代码生成器将:
,您可以在其中实现自己的和/或//假设枚举类型枚举varchar值:
SQLDataType myEnumType=
asConvertedDataType(新的MyEnumConverter());
现在,您可以使用
context.select(字段(“列”,myEnumType),…)
.从(表(“表”))
在这种情况下,不再需要在记录映射器中进行显式转换,因为jOOQrecord
已经包含所需的数据类型
3.使用自定义的RecordMapperProvider
如果您使用的是任何一种方法,默认情况下,将使用。它知道如何通过调用EnumClass.valueOf(stringValue)
将字符串转换为枚举。如果这不是您想要的行为(如您的问题所示),那么您仍然可以通过提供自己的行为来覆盖默认行为
这也是您所称的“高级映射器”,但您可以全局注册它,并在任何时候将其映射到MyType.class
时重用它
(4.使用转换器注册表)
jOOQ的未来版本(还不是jOOQ 3.9)可能支持转换器注册表,该注册表允许为任何类型对实现默认转换
。这就是问题所在。谢谢!解决方案3,即调用默认的EnumClass.valueOf(stringValue)
似乎是最好的方法。我将更改代码以允许valueOf()工作。