簡體   English   中英

動態創建JOOQ查詢

[英]Creating JOOQ query dynamically

我需要根據參數集動態創建JOOQ SELECT查詢。 我不知道如何動態追加它。 請幫忙

提前致謝。

jOOQ有兩種類型的API來構造查詢。

  • 允許在Java代碼中創建內聯SQL語句的DSL API,例如

     create.select(TA, TB).from(T).where(TXeq(3).and(TYeq(5))); 
  • 允許增量SQL構建的“模型”API。 您可以隨時通過DSL查詢對象上的getQuery()方法訪問“model”API

您想要做的一個示例在手冊中給出:

https://www.jooq.org/doc/latest/manual/sql-building/sql-statements/dsl-and-non-dsl/

例如,可選擇添加連接:

DSLContext create = DSL.using(configuration);
SelectQuery query = create.selectQuery();
query.addFrom(AUTHOR);

// Join books only under certain circumstances
if (join)
    query.addJoin(BOOK, BOOK.AUTHOR_ID.equal(AUTHOR.ID));

Result<?> result = query.fetch();

或者,選擇添加條件/謂詞:

query.addConditions(BOOK.TITLE.like("%Java%"));
query.addConditions(BOOK.LANGUAGE_CD.eq("en"));

更新:鑒於您的意見,這就是您要尋找的:

// Retrieve search strings from your user input (just an example)
String titleSearchString = userInput.get("TITLE");
String languageSearchString = userInput.get("LANGUAGE");
boolean lookingForTitles = titleSearchString != null;
boolean lookingForLanguages = languageSearchString != null;

// Add only those conditions that the user actually provided:
if (lookingForTitles)
    query.addConditions(BOOK.TITLE.like("%" + titleSearchString + "%"));
else if (lookingForLanguages)
    query.addConditions(BOOK.LANGUAGE_CD.eq(languageSearchString));

注意,您還可以使用Field.compare(Comparator, Object)方法:

// Initialise your dynamic arguments
Field<String> field = BOOK.TITLE;
Comparator comparator = Comparator.LIKE;
String value = "%" + titleSearchString + "%";

// Pass them to the field.compare() method
query.addConditions(field.compare(comparator, value));

有關更多信息,請考慮org.jooq.SelectQuery Javadoc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM