【问题标题】:JOOQ difference between DSL and DSLContext, when to use DSL instead of a dslContext instance?DSL 和 DSLContext 之间的 JOOQ 区别,何时使用 DSL 而不是 dslContext 实例?
【发布时间】:2021-08-03 17:39:59
【问题描述】:

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

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

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

【问题讨论】:

    标签: java sql jooq


    【解决方案1】:

    名字DSLContext的意思

    DSLConfiguration 的上下文中

    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 语句。

    【讨论】:

      猜你喜欢
      • 2021-10-19
      • 2020-10-02
      • 1970-01-01
      • 2019-01-14
      • 2015-12-27
      • 1970-01-01
      • 2018-04-13
      • 2023-02-23
      • 2015-03-02
      相关资源
      最近更新 更多