java - 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 对象是否安全?
解决方案
名字的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 语句。
推荐阅读
- python - 函数 replace_list(list_1, value1, value2) 其中 value1 必须替换为 list_1 中的 value2
- perl - perl : 不能从其他 perl 文件中要求 $value 并在第三个 perl 文件中使用它
- windows - 使用 OpenSSL 在 Windows 中为 RabbitMQ 创建密钥、证书和 CA 证书
- python - 如何在 Python 中使用 prototbuf 映射?
- python - 当 python.exe 设置为“以管理员身份运行”时,在 Windows 中运行 python 脚本会给出“无法使用 ... 创建进程”
- python - 如何将 os.popen 命令更改为 python 中的子进程命令
- enterprise-architect - 使用 Enterprise Architect 签入(通过 SVN 版本控制)整个包树
- list - 在 SectionList 中,我如何隐藏空部分的部分标题(数据:[])
- layout - Magento 2 - 在购物车按钮后移动产品自定义选项部分
- javascript - 如何安装 yarn 来修复本地 repo 中的依赖问题?