可用版本: Dev (3.21) | 最新 (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11

自定义数据类型转换

适用于 ✅ 开源版   ✅ 专业版   ✅ 企业版

jOOQ 支持多种 内置数据类型 以及 用户定义类型。如果您希望将自己的域类型(另请参见 SQL 域类型)与您的 表列 或其他 列表达式 一起使用,则可以使用 jOOQ 的 org.jooq.Converter API。

Converter 允许两种 Java 数据类型 TU 之间的双向转换。按照惯例,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);

反馈

您对此页面有任何反馈吗? 我们很乐意听到!

The jOOQ Logo