Jooq模式名称作为查询参数

时间:2019-11-13 15:47:29

标签: schema jooq

我需要根据用户输入更改查询的架构名称。 如何在运行时将模式名称传递/更改为JOOQ查询? 谢谢。

1 个答案:

答案 0 :(得分:0)

基于jOOQ的解决方案:

您要研究一个名为runtime schema mapping的功能。您可以提供输入/输出架构名称对,这些名称将用于映射生成的SQL中所有对象的架构名称:

matches

您现在可以使用上面的var inputScore = 75; db.gtlt.aggregate( [ { $addFields: { matches: { $switch: { branches: [ { case: { $eq : [ "$condition", "gt" ] }, then: { $cond: [ { $gt: [ inputScore, "$score" ] }, true, false ] } }, { case: { $eq : [ "$condition", "lt" ] }, then: { $cond: [ { $lt: [ inputScore, "$score" ] }, true, false ] } }, ], default: false } } } }, { $match: { matches: true } }, { $project: { matches: 0 } } ] ) 编写这样的查询:

/**
 * Call is in held state.
 *
 *  **AOSP**: BluetoothHeadsetClientCall.CALL_STATE_HELD
 */

生成的SQL将是:

DSLContext ctx = DSL.using(connection, new Settings().withRenderMapping(
    new RenderMapping().withSchemata(
        new MappedSchema().withInput("INPUT").withOutput("OUTPUT")
    )
));

基于SQL的解决方案

除了完全限定架构之外,还可以阻止使用DSLContext生成架构名称,然后使用DSLContext.setSchema()或其他方法指定数据库连接的默认架构。 / p>