首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >只为某些字段指定映射的jOOQ select into

只为某些字段指定映射的jOOQ select into
EN

Stack Overflow用户
提问于 2017-01-11 20:28:02
回答 1查看 1.5K关注 0票数 5

我使用的是jOOQ和普通SQL (不是生成的代码)。我试图直接选择一个POJO,其中包含一些类型为enum的字段。

代码语言:javascript
运行
复制
MyType pojo = context.select().from(table("Table"))
            .where(field("ID").equal("1")).fetchOne()
            .into(MyType.class);

在我看来,我只能为整个POJO指定一个高级映射器,如下所示:

代码语言:javascript
运行
复制
MyType pojo = context.select().from(table("Table"))
            .where(field("ID").equal("1")).fetchOne()
            .map(new RecordMapper<Record, MyType>() {
                @Override
                public MyType map(Record record) {
                    ...
                }
            });

我无法找到只为某些字段提供映射或转换器的方法。具体来说,我想告诉jooq“正常地转换所有字段,除非我的POJO中的字段是MyEnum类型,在这种情况下使用此映射(或转换器)”。

如何为某些字段而不是其他字段指定映射程序?

顺便说一句,我注意到我可以在配置级别执行类似的操作,将数据库字段名与通配符(如描述的这里)匹配,但我认为最好由POJO中的字段类型来决定。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-12 20:05:18

解决这一问题有各种不同的方法:

1.使用代码生成器

很明显。我知道你没有用,但也许会有人发现这个问题。在这种情况下,代码生成器将:

  1. 自动为您生成枚举类型(如果使用MySQL或PostgreSQL枚举)
  2. 允许您使用<forcedTypes/>,在这里您可以实现自己的换流器和/或绑定

2.使用显式转换器/绑定(也可以使用普通SQL )。

即使不使用代码生成器,也可以通过指定自己的DataType从自定义转换器/绑定中获益。

代码语言:javascript
运行
复制
// Assuming that the enum type enumerates varchar values:
SQLDataType<MyEnum> myEnumType = 
    SQLDataType.VARCHAR.asConvertedDataType(new MyEnumConverter());

现在,您可以在普通SQL Field表达式中使用该类型,使用DSL.field(String, DataType)

代码语言:javascript
运行
复制
context.select(field("Column", myEnumType), ...)
       .from(table("Table"))

在这种情况下,记录映射程序中不再需要显式转换,因为jOOQ Record已经包含所需的数据类型。

3.使用自定义RecordMapperProvider

如果您使用的是任何into(Class)方法,默认情况下,将使用DefaultRecordMapper。它知道如何通过调用EnumClass.valueOf(stringValue)将字符串转换为枚举。如果这不是您想要的行为(正如您的问题所建议的那样),那么您仍然可以通过提供您自己的RecordMapperProvider来覆盖默认行为。

这也是您所称的“高级映射器”,但您可以在全局注册它,并在您想映射到MyType.class时随时重用它。

(4.使用转换器注册表)

未来版本的jOOQ (还不是jOOQ 3.9 )可能支持转换器注册中心,该注册表允许为任何类型的<T, U>实现默认转换。这是问题#5713

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41600104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档