如何将 <forcedType> 应用于 jOOQ 中的存储函数?
How to apply a <forcedType> to a stored function in jOOQ?
jOOQ 用户的一个常见问题是如何将 <forcedType>
应用于代码生成器中的存储函数 return 类型。手册规定 <includeExpression>
匹配合格或不合格的标识符,因此给出这个 HSQLDB 函数:
CREATE FUNCTION stored_functions.f_1 (p_i int)
RETURNS int
BEGIN ATOMIC
RETURN p_i;
END
函数的参数可以强制String
使用:
<forcedType>
<userType>java.lang.String</userType>
<converter>
org.jooq.Converter.ofNullable(Integer.class, String.class, Object::toString, Integer::valueOf)
</converter>
<includeExpression>(?i:f_1\.p_i)</includeExpression>
</forcedType>
这会产生以下 Parameter
规范:
/**
* The parameter <code>STORED_FUNCTIONS.F_1.P_I</code>.
*/
public static final Parameter<String> P_I = Internal.createParameter(
"P_I", org.jooq.impl.SQLDataType.INTEGER, false, false,
org.jooq.Converter.ofNullable(Integer.class, String.class, Object::toString, Integer::valueOf)
);
如何对 return 值执行相同的操作?
有一个可以使用的合成参数名称。它被称为 return_value
,这也是生成的 Parameter
文字的名称。
以下规范将对 P_I
参数和 RETURN_VALUE
参数应用相同的转换器:
<forcedType>
<userType>java.lang.String</userType>
<converter>
org.jooq.Converter.ofNullable(Integer.class, String.class, Object::toString, Integer::valueOf)
</converter>
<includeExpression>(?i:f_1\.p_i|return_value)</includeExpression>
</forcedType>
这会产生以下 Parameter
规格:
/**
* The parameter <code>STORED_FUNCTIONS.F_1.RETURN_VALUE</code>.
*/
public static final Parameter<String> RETURN_VALUE = Internal.createParameter(
"RETURN_VALUE", org.jooq.impl.SQLDataType.INTEGER, false, false,
org.jooq.Converter.ofNullable(Integer.class, String.class, Object::toString, Integer::valueOf)
);
/**
* The parameter <code>STORED_FUNCTIONS.F_1.P_I</code>.
*/
public static final Parameter<String> P_I = Internal.createParameter(
"P_I", org.jooq.impl.SQLDataType.INTEGER, false, false,
org.jooq.Converter.ofNullable(Integer.class, String.class, Object::toString, Integer::valueOf)
);
jOOQ 用户的一个常见问题是如何将 <forcedType>
应用于代码生成器中的存储函数 return 类型。手册规定 <includeExpression>
匹配合格或不合格的标识符,因此给出这个 HSQLDB 函数:
CREATE FUNCTION stored_functions.f_1 (p_i int)
RETURNS int
BEGIN ATOMIC
RETURN p_i;
END
函数的参数可以强制String
使用:
<forcedType>
<userType>java.lang.String</userType>
<converter>
org.jooq.Converter.ofNullable(Integer.class, String.class, Object::toString, Integer::valueOf)
</converter>
<includeExpression>(?i:f_1\.p_i)</includeExpression>
</forcedType>
这会产生以下 Parameter
规范:
/**
* The parameter <code>STORED_FUNCTIONS.F_1.P_I</code>.
*/
public static final Parameter<String> P_I = Internal.createParameter(
"P_I", org.jooq.impl.SQLDataType.INTEGER, false, false,
org.jooq.Converter.ofNullable(Integer.class, String.class, Object::toString, Integer::valueOf)
);
如何对 return 值执行相同的操作?
有一个可以使用的合成参数名称。它被称为 return_value
,这也是生成的 Parameter
文字的名称。
以下规范将对 P_I
参数和 RETURN_VALUE
参数应用相同的转换器:
<forcedType>
<userType>java.lang.String</userType>
<converter>
org.jooq.Converter.ofNullable(Integer.class, String.class, Object::toString, Integer::valueOf)
</converter>
<includeExpression>(?i:f_1\.p_i|return_value)</includeExpression>
</forcedType>
这会产生以下 Parameter
规格:
/**
* The parameter <code>STORED_FUNCTIONS.F_1.RETURN_VALUE</code>.
*/
public static final Parameter<String> RETURN_VALUE = Internal.createParameter(
"RETURN_VALUE", org.jooq.impl.SQLDataType.INTEGER, false, false,
org.jooq.Converter.ofNullable(Integer.class, String.class, Object::toString, Integer::valueOf)
);
/**
* The parameter <code>STORED_FUNCTIONS.F_1.P_I</code>.
*/
public static final Parameter<String> P_I = Internal.createParameter(
"P_I", org.jooq.impl.SQLDataType.INTEGER, false, false,
org.jooq.Converter.ofNullable(Integer.class, String.class, Object::toString, Integer::valueOf)
);