Det finns två sätt att interagera med tabeller/kolumner dynamiskt (d.v.s. utan att använda kodgeneratorn) i jOOQ:
Använder vanlig SQL (org.jooq.SQL
)
Det är vad du gör. Du kan självklart kvalificera kolumnerna direkt i ditt vanliga SQL Field
referenser på två sätt:
Genom att upprepa "tmp"
sträng i varje fält:
Table<Record> TMP = DSL.table("tmp");
Field<String> TYPE = DSL.field("tmp.type", String.class);
Field<String> TOKEN = DSL.field("tmp.token", String.class);
Genom att bädda in "tmp"
referens i den vanliga SQL-mallen:
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);
Den vanliga SQL-funktionaliteten finns dokumenterad här i manualen
Använda kvalificerade referenser (org.jooq.Name
)
Det är förmodligen det du vill göra istället. Du kommer att skriva:
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);
Namngivningsfunktionen beskrivs här i manualen .
Fördelarna med detta tillvägagångssätt är:
- Ingen SQL-injektionsrisk
- Skiftlägeskänslighet tas om hand
- Tabellmappning och andra AST-transformationer fungerar också