Es gibt zwei Möglichkeiten, mit Tabellen / Spalten dynamisch (d. h. ohne Verwendung des Codegenerators) in jOOQ zu interagieren:
Mit einfachem SQL (org.jooq.SQL
)
Das tust du. Sie können die Spalten natürlich direkt in Ihrem einfachen SQL-Field
qualifizieren Verweise auf zwei Arten:
Durch Wiederholung des "tmp"
Zeichenfolge in jedem Feld:
Table<Record> TMP = DSL.table("tmp");
Field<String> TYPE = DSL.field("tmp.type", String.class);
Field<String> TOKEN = DSL.field("tmp.token", String.class);
Durch Einbetten des "tmp"
Verweis in der einfachen SQL-Vorlage:
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);
Die einfache SQL-Funktionalität ist hier im Handbuch dokumentiert
Mit qualifizierten Referenzen (org.jooq.Name
)
Das ist wahrscheinlich das, was Sie stattdessen tun möchten. Sie schreiben:
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);
Die Benennungsfunktion wird hier im Handbuch beschrieben .
Die Vorteile dieses Ansatzes sind:
- Kein SQL-Injection-Risiko
- Groß- und Kleinschreibung wird berücksichtigt
- Tabellenzuordnung und andere AST-Umwandlungen funktionieren auch