我想使用 JOOQ 创建一个选择查询。我想根据系统属性值在查询中包含或排除几个字段。
在下面的方法中
String getBankDetails(){
return select(field("Name"),
field("Bank_Account_Name"),
field("Bank_Account_Number")
.from(table("BANK"))
.getSQL(ParamType.INLINED);
}
我想动态添加一个字段,如下所示
field("Bank_Account_Branch") if System.getProperty("enableBranch") == true
使用可选列表达式或仅投影
null
:
select(
BANK.NAME,
BANK.BANK_ACCOUNT_NAME,
BANK.BANK_ACCOUNT_NUMBER,
"true".equals(System.getProperty("enableBranch"))
? BANK.BANK_ACCOUNT_BRANCH
: noField(BANK.BANK_ACCOUNT_BRANCH))
.from(BANK)
.fetch();
或者,只需投影
null
:
"true".equals(System.getProperty("enableBranch"))
? BANK.BANK_ACCOUNT_BRANCH
: cast(inline(null), BANK.BANK_ACCOUNT_BRANCH))
请注意,此答案假设您将使用代码生成器。除非您的架构是真正动态的(因此在编译时未知),否则您只能从使用代码生成中受益,并且可以解决大量问题。例如,在您的问题中,您没有将数据类型附加到投影中,因此您将依赖于 JDBC 将返回给您的任何内容。但答案也适用于动态模式:
select(
field("Name", VARCHAR),
field("Bank_Account_Name", VARCHAR),
field("Bank_Account_Number", VARCHAR),
"true".equals(System.getProperty("enableBranch"))
? field("Bank_Account_Branch", VARCHAR)
: noField(VARCHAR))
.from("BANK")
.fetch();