变量绑定
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
每个 org.jooq.QueryPart 都必须实现 accept(Context<?>) 方法。这个 Context 有两个目的(还有许多其他目的)
- 它提供了一些关于变量绑定过程中 "状态" 的信息。
- 它为将值绑定到 context 的内部
java.sql.PreparedStatement提供了一个通用的 API
此处的 org.jooq.BindContext API 概述
// This method provides access to the PreparedStatement to which bind values are bound PreparedStatement statement(); // These methods provide convenience to delegate variable binding BindContext bind(QueryPart part) throws DataAccessException; BindContext bind(Collection<? extends QueryPart> parts) throws DataAccessException; BindContext bind(QueryPart[] parts) throws DataAccessException; // These methods perform the actual variable binding BindContext bindValue(Object value, Class<?> type) throws DataAccessException; BindContext bindValues(Object... values) throws DataAccessException;
一些其他方法继承自通用的 org.jooq.Context,该 Context 在 org.jooq.RenderContext 和 org.jooq.BindContext 之间共享。详细信息记录在上一章关于 SQL 渲染 的内容中
一个将值绑定到 SQL 的示例
通过查看 jOOQ 内部表示的 (简化的) CompareCondition 可以提供一个简单的例子。它用于任何 org.jooq.Condition 比较两个字段,例如这里的 AUTHOR.ID = BOOK.AUTHOR_ID 条件
-- [...] WHERE AUTHOR.ID = ? -- [...]
这是 jOOQ 如何在这种条件下绑定值的
@Override
public final void bind(BindContext context) throws DataAccessException {
// The CompareCondition itself does not bind any variables.
// But the two fields involved in the condition might do so...
context.bind(field1).bind(field2);
}
请参阅手册关于 自定义 QueryParts 和 纯 SQL QueryParts 的章节,了解如何编写自己的 query parts 以扩展 jOOQ。
反馈
您对此页面有任何反馈吗?我们很乐意听到您的意见!