如何将< forcedtype>应用于jooq中的存储函数?

bnl4lu3b  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(385)

jooq用户的一个常见问题是 <forcedType> 可应用于代码生成器中的存储函数返回类型。手册规定 <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)
);

如何对返回值执行相同的操作?

tcomlyy6

tcomlyy61#

可以使用一个合成参数名。它叫 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)
);

相关问题