QueryDSL如何写“在哪里?col1和col2之间”

Koh*_*aki 3 querydsl

如何编写WHERE类似于WHERE ? BETWEEN col1 AND col2QueryDSL的子句?我知道我可以这样写,

...
.where(mytable.col1.loe(constant), mytable.col2.goe(constant))
...
Run Code Online (Sandbox Code Playgroud)

但是,使用BETWEEN会使查询更具可读性。

我使用QueryDSL 3.2.3。


更新:

我最终得到了这样的东西(一个可通过运行的测试用例mvn test):

final int constant = 10;
final QMyTable m = QMyTable.myTable;
final SimpleExpression<Boolean> operation = Expressions.operation(Boolean.class, Ops.BETWEEN,
        Expressions.constant(constant), m.col1, m.col2);

// This yields:
// SELECT ID, COL1, COL2 FROM MYTABLE WHERE ((? BETWEEN COL1 AND COL2) = ?)
// bind => [10, true]
final MyTable actual = new JPAQuery(em).from(m).where(operation.eq(true)).uniqueResult(m);
Run Code Online (Sandbox Code Playgroud)

无论如何它都能工作,但是该部分= ?是多余的。我想要一个更简单的东西,例如:

SELECT ID, COL1, COL2 FROM MYTABLE WHERE (? BETWEEN COL1 AND COL2)
Run Code Online (Sandbox Code Playgroud)

我不知道怎么写。有没有办法通过QueryDSL构造此查询?

Koh*_*aki 5

我刚刚发现了这个:

final int constant = 10;
final QMyTable m = QMyTable.myTable;
final BooleanExpression operation = Expressions.booleanOperation(Ops.BETWEEN,
        Expressions.constant(constant), m.col1, m.col2);

// This yields:
// SELECT ID, COL1, COL2 FROM MYTABLE WHERE (? BETWEEN COL1 AND COL2)
// bind => [10]
final MyTable actual = new JPAQuery(em).from(m).where(operation).uniqueResult(m);
Run Code Online (Sandbox Code Playgroud)

这构成了我一直在寻找的一个。

测试用例:https : //github.com/lbtc-xxx/querydsl-sandbox/blob/master/src/test/java/sandbox/QueryDslBetweenTest.java