jooq-获取单个值
我有一个问题..为什么我重复了我在fetch方法中选择的内容。
Date minDate = getDSLContext() .select(CON_CAL_INSTANCE.DATE.min()) .from(CON_CAL_INSTANCE) .join(CON_CAL_TEMPLATES) .on(CON_CAL_INSTANCE.TEMPLATE_ID.eq(CON_CAL_TEMPLATES.ID)) .where(CON_CAL_TEMPLATES.ENTRY_TYPE.in("REPT", "HRPT")) .fetchOne(CON_CAL_INSTANCE.DATE.min());
所以我在select子句中提供了CON_CAL_INSTANCE.DATE.min()
,为什么我必须在fetchOne(CON_CAL_INSTANCE.DATE.min())
重复它?
或者我不是这样做的吗?
你做得对。 使用Javagenerics构建jOOQ DSL的方式,即使ResultQuery
使用Record1
作为行类型, ResultQuery
也不会“知道”它只选择单个值。
除了重复列之外,您还有其他一些选择:
ResultQuery> query = // ... // Use two method calls (this may result in a NullPointerException! // as fetchOne() may return null): Date date1 = query.fetchOne().value1(); // Use fetchValue(): Date date2 = getDSLContext().fetchValue(query);
另请参见DSLContext.fetchValue()
Javadoc 。
使用更多LINQ风格的语法
在旁注中,过去曾讨论过在jOOQ API中使用更多LINQ风格的语法:
from Table where Predicates select Projection
一开始看起来好主意的是提出新问题:
-
ORDER BY
,FOR UPDATE
子句怎么样,应该在SELECT
之后放置。 ( 详情请参阅此帖 )。 - 如何设置操作,如
UNION
,INTERSECT
和EXCEPT
。
我还在这里写了关于SQL中词法和逻辑运算顺序之间的区别
这些开放性问题使我们坚持使用标准的SQL语法。