使用jOOQ构建SQL时如何将变量绑定到条件语句?

时间:2019-01-23 06:48:36

标签: java mysql jooq

我正在使用jOOQ-3.11.9构建SQL。以下是我的代码:

String sql = DSL.using(SQLDialect.MYSQL)
        .select(DSL.asterisk())
        .from(table("service"))
        .where("name = ?", "service1")
        .getSQL();

我期望的是

select * from service where (name = "service1")

但是结果是

select * from service where (name = ?)

我的代码有什么问题吗?

2 个答案:

答案 0 :(得分:0)

您应该使用jOOQ生成的类中的字段名称:

String sql = DSL.using(SQLDialect.MYSQL)
    .select(DSL.asterisk())
    .from(YOURENTITY)
    .where(YOURENTITY.NAME.eq(nameParam))
    .getSQL();

YOURENTITY应该是项目中jOOQ生成的类。 nameParam将成为传递给包装以上查询的方法的参数。

jOOQ的文档非常不错,其中包含许多示例: https://www.jooq.org/doc/3.11/manual/sql-building/sql-statements/select-statement/where-clause/

答案 1 :(得分:0)

这按预期工作。默认的Settings.statementType值为StatementType.PREPARED_STATEMENT,因此jOOQ默认情况下会在您的SQL字符串中生成绑定值占位符,可用于在其他工具(例如JDBC,Spring等)中执行。

您可以将ParamType.INLINE值传递给getSQL()方法,或指定Settings.withStatementType(StatementType.STATIC_STATEMENT)

请考虑Javadoc中的解释以获取更多详细信息: https://www.jooq.org/javadoc/latest/org/jooq/Query.html#getSQL--