gpt4 book ai didi

java - 如何从 jOOQ 中的值 T 明确创建 Field

转载 作者:行者123 更新时间:2023-12-04 11:11:26 24 4
gpt4 key购买 nike

在 jOOQ 中,很容易在表达式中使用绑定(bind)变量,例如:

MY_TABLE.COL.eq(1);
MY_TABLE.COL.in(1, 2, 3);
MY_TABLE.COL.between(1).and(10);
以上所有方法都接受 TField<T>类型,例如 Field.eq(T) Field.eq(Field<T>) .但是如果我想把绑定(bind)变量放在表达式的左边怎么办?这些显然不起作用:
1.eq(MY_TABLE.COL);
1.in(MY_TABLE.COL1, MY_TABLE.COL2, MY_TABLE.COL3);
1.between(MY_TABLE.COL1).and(MY_TABLE.COL2);
我怎样才能转动那些 1"xyz"进入 Field<Integer>Field<String> , 等等。?
(这是 jOOQ 邮件列表等上的一个热门问题,所以我在这里记录)

最佳答案

接受方法 T只是方便的方法。在幕后,他们都包裹了T参数在 DSL.val(T)

// This
MY_TABLE.COL.eq(1);

// Is just convenience for this:
MY_TABLE.COL.eq(val(1));

// Or rather, this one to be precise
MY_TABLE.COL.eq(val(1, MY_TABLE.COL.getDataType()));
因为将所有内容都包裹在 val() 中会非常冗长和繁琐,jOOQ 的所有 API 都接受 Field<T>也接受 T为了方便。如果 Java 具有未标记的联合类型,则此类方法的参数类型将为 T|Field<T> .
在极少数情况下,用户需要将其绑定(bind)值显式包装在 val() 中。 , 包含:
  • 当绑定(bind)值位于表达式的左侧时
  • 当绑定(bind)值用于不支持此类重载的子句时,例如在 select()
  • 当具有许多重载的函数需要 Field<T> 时参数之一的类型

  • 所以,只要写:
    val(1).eq(MY_TABLE.COL);
    val(1).in(MY_TABLE.COL1, MY_TABLE.COL2, MY_TABLE.COL3);
    val(1).between(MY_TABLE.COL1).and(MY_TABLE.COL2);
    注意还有 DSL.inline(T) 创建“内联值”,或“常量”、“文字”,而不是绑定(bind)值。
    也可以看看:
  • https://www.jooq.org/doc/latest/manual/sql-building/bind-values/indexed-parameters/
  • https://www.jooq.org/doc/latest/manual/sql-building/bind-values/inlined-parameters/
  • 关于java - 如何从 jOOQ 中的值 T 明确创建 Field<T> ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67522537/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com