自定义数据类型转换
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
jOOQ 支持多种 内置数据类型 以及 用户定义类型。如果您希望将自己的域类型(另请参见 SQL 域类型)与您的 表列 或其他 列表达式 一起使用,则可以使用 jOOQ 的 org.jooq.Converter API。
Converter 允许两种 Java 数据类型 T 和 U 之间的双向转换。按照惯例,T 类型对应于数据库中的内置类型,而 U 类型对应于您自己的用户类型。Converter API 总结如下
public interface Converter<T, U> extends Serializable {
/**
* Convert a database object to a user object
*/
U from(T databaseObject);
/**
* Convert a user object to a database object
*/
T to(U userObject);
/**
* The database type
*/
Class<T> fromType();
/**
* The user type
*/
Class<U> toType();
}
这样的 Converter 可以在 jOOQ API 的许多部分中使用。虽然将它们附加到 生成的代码 时功能最强大,但您也可以按如下方式将它们附加到任意表达式
record IntegerWrapper(Integer wrapped) {}
DataType<Integer> t = SQLDataType.INTEGER;
// This DataType can now be used everywhere in jOOQ. It will remember how to
// convert between Integer and the user type IntegerWrapper
DataType<IntegerWrapper> u = t.asConvertedDataType(Converter.of(
Integer.class,
IntegerWrapper.class,
IntegerWrapper::new,
IntegerWrapper::wrapped
));
// For example, you can attach it to a plain SQL template:
Field<IntegerWrapper> f1 = field("ID", u);
// Or you can coerce any expression to your type:
Field<IntegerWrapper> f2 = BOOK.ID.coerce(u);
反馈
您对此页面有任何反馈吗? 我们很乐意听到!