List<MyTable> result = DSL.using(configuration())
.select()
.from(MY_TABLE)
.where(MY_TABLE.ID1.equal(pk_id1))
.and(MY_TABLE.ID2.equal(fk_id2))
.and(MY_TABLE.ID3.equal(fk_id3))
.orderBy(MY_TABLE.ID.asc())
.limit(limit)
.fetchInto(MY_TABLE)
.map(mapper());
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一些代码,允许我的查询采用三个可选的id,例如我希望查询最终成为
select * from my_table where ID1=5 and ID2=6 and ID3=7 .... etc
Run Code Online (Sandbox Code Playgroud)
但是,我还想选择能够排除任何id
select * from my_table where ID2=6 and ID3=7
Run Code Online (Sandbox Code Playgroud)
要么
select * from my_table where ID3=7
Run Code Online (Sandbox Code Playgroud)
这个问题是第一个"where"子句属于id 1,其余的是ands所以如果我做了一个if语句并且我删除了那里然后我会留下
List<MyTable> result = DSL.using(configuration())
.select()
.from(MY_TABLE)
.and(MY_TABLE.ID2.equal(fk_id2))
.and(MY_TABLE.ID3.equal(fk_id3))
.orderBy(MY_TABLE.ID.asc())
.limit(limit)
.fetchInto(MY_TABLE)
.map(mapper());
Run Code Online (Sandbox Code Playgroud)
它不会起作用.
我试图寻找类似于where id = **are essentianlly没有过滤器的东西,但我找不到那样的东西.
Luk*_*der 15
jOOQ使编写SQL感觉好像它是静态的嵌入式SQL.但事实并非如此.每个jOOQ查询都是一个由表达式树组成的动态SQL查询 - 您只是没有注意到它.
该SelectWhereStep.where(Condition)方法接受一个Condition参数,您不必使用该WHERE子句放在那里.您可以在查询之前构造它:
Condition condition = DSL.trueCondition();
if (something)
condition = condition.and(MY_TABLE.ID1.equal(pk_id1));
if (somethingElse)
condition = condition.and(MY_TABLE.ID2.equal(fk_id2));
if (somethingOther)
condition = condition.and(MY_TABLE.ID3.equal(fk_id3));
Run Code Online (Sandbox Code Playgroud)
您现在可以将其传递给您的查询:
List<MyTable> result =
DSL.using(configuration())
.select()
.from(MY_TABLE)
.where(condition)
.orderBy(MY_TABLE.ID.asc())
.limit(limit)
.fetchInto(MY_TABLE)
.map(mapper());
Run Code Online (Sandbox Code Playgroud)
还有一些实用方法DSL,例如:
DSL.condition(Map<Field<?>,?>) 从字段/值比较映射构造条件DSL.condition(Record)使用" 按示例查询"模式DSL.condition(Operator, Condition...)或者只是DSL.and(Condition...)为了AND从数组(或集合)构造连通条件这也在手册中记录:http://www.jooq.org/doc/latest/manual/sql-building/dynamic-sql/
| 归档时间: |
|
| 查看次数: |
2648 次 |
| 最近记录: |