DSL 和 DSLContext 之间的 JOOQ 区别,何时使用 DSL 而不是 dslContext 实例?

JOOQ difference between DSL and DSLContext, when to use DSL instead of a dslContext instance?

当有这样的查询时,对于内部查询,我应该使用 DSL 还是我拥有的 dslContext?

return dslContext
    .insertInto(TABLE_FOO)
    .select(
        dslContext         // vs DSL here
            .select(
                ...
            .from(TABLE_BAR))
    .execute();

根据我的研究,我了解到 DSL 是 JOOQ 表达 SQL 的入口点,而不是在连接的上下文中。在上面的例子中,使用 DSL 代替 dslContext 对象是否安全?

名字DSLContext意思是

DSL in the context of a Configuration

API 是等效的,尽管在技术上有所不同。 DSL 的所有方法都是 static 以允许静态导入,这对于函数调用或嵌套的 select 情况特别有用。像这样使用 DSL.select() 更具可读性:

import static org.jooq.impl.DSL.*;

// ...
return dslContext
    .insertInto(TABLE_FOO)
    .select(
        select(...)
        .from(TABLE_BAR))
    .execute();

但是,无法执行使用静态 API 构造的对象,因此如果您想像您一样执行它们,则需要对顶级查询使用 DSLContext API做了。

另请参阅: https://www.jooq.org/doc/latest/manual/sql-building/dsl-context/

DSLContext references a org.jooq.Configuration, an object that configures jOOQ's behaviour when executing queries (see SQL execution for more details). Unlike the static DSL, the DSLContext allow for creating SQL statements that are already "configured" and ready for execution.