自定义数据类型转换
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
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);
反馈
您对此页面有任何反馈吗? 我们很乐意听到!