可用版本: Dev (3.21) | 最新 (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11

示例查询 (QBE)

适用于 ✅ 开源版   ✅ 专业版   ✅ 企业版

查询数据库表的一种常用方法叫做 Query by Example(示例查询),这意味着提供一个结果记录的“示例”来代替正式的查询

-- example book record:
ID          :
AUTHOR_ID   : 1
TITLE       :
PUBLISHED_IN: 1970
LANGUAGE_ID : 1
-- Corresponding query
SELECT *
FROM book
WHERE author_id = 1
AND published_in = 1970
AND language_id = 1

从示例记录到查询的转换非常直接

  • 如果记录属性设置为一个值,那么该值将被用于相等谓词
  • 如果记录属性未设置,那么该属性不会被用于任何谓词

jOOQ 有一个简单的 API 叫做 DSL.condition(Record),它可以将一个 org.jooq.Record 转换为一个 org.jooq.Condition

BookRecord book = new BookRecord();
book.setAuthorId(1);
book.setPublishedIn(1970);
book.setLanguageId(1);

// Using the explicit condition() API
Result<BookRecord> books1 =
DSL.using(configuration)
   .selectFrom(BOOK)
   .where(condition(book))
   .fetch();

// Using the convenience API on DSLContext
Result<BookRecord> books2 = DSL.using(configuration).fetchByExample(book);

后一个 API 调用使用了便捷 API DSLContext.fetchByExample(TableRecord)

反馈

您对此页面有任何反馈吗? 我们很乐意听取您的意见!

The jOOQ Logo