在查询的
SelectWhereStep
中使用自定义转换器的推荐方式是什么?
我有以下数据库表:
product
- id INT
- name VARCHAR
- type VARCHAR
product
表中的值看起来像
id | 名字 | 类型 |
---|---|---|
1 | 通用书籍 | 平装书 |
2 | 今日新闻 | 数字报纸 |
3 | 热门杂志 | 纸质杂志 |
重要的部分是
type
列,它是数据库中的非规范化VARCHAR。它是一种书籍类型和媒介的串联值。
我在 Java 中有一个名为
ProductType
的类,它代表这个:
public class ProductMediumType {
private ProductType type; // This is an enum
private Medium medium; // This is an enum
.....
}
我创建了
org.jooq.Converter
的实现,如下定义:自定义数据类型转换
public class ProductMediumTypeConverter extends AbstractConverter<String, ProductMediumType> {}
我想在
SelectWhereStep
中使用这个:
ProductMediumTypeConverter mediumTypeConverter = .....;
ProductMediumType mediumType = ....;
Product prod = create
.select(
PRODUCT.ID,
PRODUCT.NAME,
PRODUCT.TYPE.convert(mediumTypeConverter)
)
.from(PRODUCT)
.where(PRODUCT.TYPE.eq(/* HERE */))
.fetchInto(Product.class);
我知道我可以直接使用转换器的
.to()
方法,但我认为这样读起来不太好。有更好的方法吗?
此外,我知道我可以创建自定义转换器并在代码生成过程中使用它们,但不幸的是这在我的情况下不可行。
我假设您正在使用 jOOQ 的代码生成器,在这种情况下,您可以简单地将转换器附加到生成的代码,现在您无需再执行任何操作。 jOOQ 将始终自动在数据库类型(例如
String
)和您的用户类型(例如 ProductMediumType
)之间进行转换:
// You'll get the right type in your result sets:
Result<Record3<Integer, String, ProductMediumType>> result =
Product prod = create
.select(
PRODUCT.ID,
PRODUCT.NAME,
PRODUCT.TYPE // Nothing needed here
)
.from(PRODUCT)
.where(PRODUCT.TYPE.eq(mediumType)) // Nothing needed here either
.fetch();