【发布时间】:2017-12-30 04:06:09
【问题描述】:
我一直在使用 JOOQ,它似乎是一个非常有用的库来生成 SQL 查询。但是,我坚持动态生成它们。比如下面是我想做的(注意我只是想用它来做SQL构建,没有任何代码生成)
DSLContext context = DSL.using(SQLDialect.DEFAULT);
List<Field<?>> select = getSelect(String fields ...); // gets the selection fields
Select query = create.select(select)
.from(name("table"));
if(where)
query = query.addWhere(Conditions...);
if(groupBy)
query = query.groupBy(List<Field<?>> ...);
if(orderBy)
query = query.orderBy(List<Field<?>> ...);
不幸的是,我只能找到一种方法来一步完成它们,如下所示:
query.select()
.from(...)
.where(...)
.orderBy(...)
.fetch();
如果 .where, .orderBy 可以接受 null 并且如果它们为 null 则不将这些子句添加到 SQL 中,则上述方法可能很有用,但似乎这是不可能的。
这是我的问题:
有没有一种方法可以动态创建一个 SELECTION 查询,然后在不使用任何代码生成的情况下验证它,因为我的用例只涉及构造一个普通的 String SQL?这个答案:https://stackoverflow.com/a/14053108/1787599f 似乎不再有效,因为我在 3.6.x 中找不到工厂方法,这种用例的最佳方法是什么?
虽然我可以设置值并执行 .getSQL() 以获取带有 ? 的 SQL,但还有另一个步骤是获取绑定变量以将其传递给 PreparedStatement,是否可以一步完成?
如何将其与 JDBCTemplate 集成?
【问题讨论】:
-
“有没有办法动态创建 SELECTION 查询” - 抱歉,我不确定你的意思。你在挣扎什么? / “我在 3.6.x 中找不到工厂方法” - 你说得对,我会在那里编辑我的答案。