Java 动态创建JOOQ查询

Java 动态创建JOOQ查询,java,sql,jooq,Java,Sql,Jooq,我需要根据参数集动态创建一个JOOQ SELECT查询。我不知道如何动态附加它。 请帮忙 提前感谢。jOOQ有两种类型的API来构造查询 DSLAPI允许在Java代码中创建内联SQL语句,例如 create.select(T.A, T.B).from(T).where(T.X.eq(3).and(T.Y.eq(5))); 允许增量SQL构建的“模型”API。在任何时候,您都可以通过DSL查询对象上的方法访问“model”API 手册中给出了您想要执行的操作示例: 例如,可以选择添加联

我需要根据参数集动态创建一个JOOQ SELECT查询。我不知道如何动态附加它。 请帮忙


提前感谢。

jOOQ有两种类型的API来构造查询

  • DSLAPI允许在Java代码中创建内联SQL语句,例如

    create.select(T.A, T.B).from(T).where(T.X.eq(3).and(T.Y.eq(5)));
    
  • 允许增量SQL构建的“模型”API。在任何时候,您都可以通过DSL查询对象上的方法访问“model”API

手册中给出了您想要执行的操作示例:

例如,可以选择添加联接:

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();
更新:根据您的评论,这就是您想要的:

// 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=BOOK.TITLE;
比较器比较器=比较器类;
字符串值=“%”+titleSearchString+“%”;
//将它们传递给field.compare()方法
addConditions(field.compare(comparator,value));

对于更多信息,考虑JavaDoc

你能更明确一些吗?例如,您能否提供一个您想要构造的示例查询?您尝试了什么,哪里失败了?实际上我需要创建select查询;其中,我需要根据传递的参数更新where子句。就像在UI中一样,我正在传递一些过滤器,并希望动态地添加到我的WHERE条件。但是我还有一个问题。我可以在查询中使用java变量(特别是在addConditions部分),以便在运行时输入这些变量的值。例如,列名。@user1900723:是什么阻止您将这些元素分配给Java中的变量?让我解释一下这个场景。实际上,我有一些列需要在表中搜索。例如:姓名、ID、日期。我需要根据它们获取数据,让另一个参数包含值,比如等于,以(需要使用like运算符)开始,以(需要使用like运算符)结束。我需要动态地完成这一切。所以,需要使用变量,这样我就可以动态地设置值。如果您需要进一步的澄清,请告诉我。我被困在这里。@user1900723:我明白你想做什么。但是到目前为止你已经试过什么了?你到底被困在哪里?请随时更新(编辑)您的问题以添加更多信息。实际上,我不明白如何在addConditions函数中动态添加这些EQUAL和LIKE函数。如果您能给我一个非常简短的示例代码,那就太好了。到目前为止,我读到的是,我们可以在运行时使用SelectQuery工厂进行Jooq查询,还可以动态添加条件和联接。但是如何添加这些操作符(Like和Equal)。
// 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));
// 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));