可以从jOOQ中动态构造的查询中删除子句(在我的例子中为order by
子句)。
假设在创建查询后:
DSLContext create = DSL.using(SQLDialect.POSTGRES);
SelectQuery<Record> query = create.select().from("myTable").where("fk = 1").orderBy(DSL.field("pk")).getQuery();
System.out.println(query.getSQL());
// select * from myTable where (fk = 1) order by pk asc
我想更改order by
子句或将其删除以仅获取
select * from myTable where (fk = 1)
可以用jOOQ制作吗?如果不可能,并且任何人都知道允许这样做的查询构建器库也将受到欢迎。
答案 0 :(得分:4)
目前无法通过公共API完成此操作。在未来的jOOQ 4.0中,可能是the DSL API and the Model API的更清晰的分离,其中这样的模型API允许您自由地操纵所有查询部分,包括再次从{{1}删除对象条款。
目前,您至少有两个选项来实现动态SQL:
在您知道是否需要之前,请不要添加SELECT
子句:
ORDER BY
另类逻辑:
SelectQuery<?> select = create
.select()
.from("myTable")
.where("fk = 1")
.getQuery();
if (someCondition)
select.addOrderBy(DSL.field("pk"));
使用ExecuteListener
或VisitListener
对您的查询进行后处理/转换。不过,这在边缘情况下更像是一种解决方法。
在您的特定情况下,您应该使用选项1. Another, more functional approach to tackling dynamic SQL generation is documented here。