在jOOQ中有两种与表/列动态交互的方式(即,不使用代码生成器):
使用普通SQL(org.jooq.SQL)
那就是你在做什么。显然,您可以
Field通过两种方式直接在普通SQL 引用中限定列:
通过
"tmp"在每个字段中重复字符串:
Table<Record> TMP = DSL.table("tmp");Field<String> TYPE = DSL.field("tmp.type", String.class);Field<String> TOKEN = DSL.field("tmp.token", String.class);
通过将
"tmp"引用嵌入到普通的SQL模板中:
Table<Record> TMP = DSL.table("tmp");Field<String> TYPE = DSL.field("{0}.type", String.class, TMP);Field<String> TOKEN = DSL.field("{0}.token", String.class, TMP);
普通的SQL功能在手册中有说明
使用合格的参考(org.jooq.Name)
那可能就是您想要做的。您会写:
Table<Record> TMP = DSL.table(DSL.name("tmp"));Field<String> TYPE = DSL.field(DSL.name("tmp", "type"), String.class);Field<String> TOKEN = DSL.field(DSL.name("tmp", "token"), String.class);
命名功能在手册中进行了描述。
这种方法的优点是:
- 没有SQL注入风险
- 区分大小写
- 表映射和其他AST转换也将起作用
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)