首页 > 解决方案 > DSL 和 DSLContext 之间的 JOOQ 区别,何时使用 DSL 而不是 dslContext 实例?

问题描述

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

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

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

标签: javasqljooq

解决方案


名字的DSLContext意思

DSL在一个背景下Configuration

API 是等效的,但在技术上有所不同。所有DSL的方法都static允许静态导入,这对于函数调用或嵌套选择案例特别有用。像这样使用更具可读性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 引用了 org.jooq.Configuration,这是一个在执行查询时配置 jOOQ 行为的对象(有关详细信息,请参阅 SQL 执行)。与静态 DSL 不同,DSLContext 允许创建已经“配置”并准备好执行的 SQL 语句。


推荐阅读