JDBC versus jOOQ
Ersetze stringbasiertes SQL mit rohem JDBC durch das typsichere, fließende SQL-DSL von jOOQ.
String sql = "SELECT id, name, email FROM users "
+ "WHERE department = ? AND salary > ?";
try (Connection con = ds.getConnection();
PreparedStatement ps =
con.prepareStatement(sql)) {
ps.setString(1, department);
ps.setBigDecimal(2, minSalary);
ResultSet rs = ps.executeQuery();
List<User> result = new ArrayList<>();
while (rs.next()) {
result.add(new User(
rs.getLong("id"),
rs.getString("name"),
rs.getString("email")));
}
return result;
}
DSLContext dsl = DSL.using(ds, SQLDialect.POSTGRES);
return dsl
.select(USERS.ID, USERS.NAME, USERS.EMAIL)
.from(USERS)
.where(USERS.DEPARTMENT.eq(department)
.and(USERS.SALARY.gt(minSalary)))
.fetchInto(User.class);
Typsichere Spalten
Spaltennamen sind generierte Java-Konstanten — Tippfehler und Typfehler werden zu Kompilierfehlern statt Laufzeitfehlern.
SQL-Flüssigkeit
Das jOOQ-DSL spiegelt die SQL-Syntax eng wider, sodass komplexe JOINs, Unterabfragen und CTEs lesbar bleiben.
Injektionssicher per Design
Parameter werden immer sicher gebunden — keine Stringverkettung bedeutet kein SQL-Injection-Risiko.
Die Open-Source-Edition von jOOQ unterstützt alle gängigen Open-Source-Datenbanken; ältere kommerzielle Datenbanken erfordern eine kostenpflichtige Lizenz
jOOQ (Java Object Oriented Querying) generiert Java-Code aus dem Datenbankschema und wandelt Tabellen- und Spaltennamen in typsichere Java-Konstanten um. Das fließende DSL spiegelt die SQL-Syntax wider, sodass Abfragen lesbar und kombinierbar sind. Alle Parameter werden automatisch gebunden, was SQL-Injection-Risiken eliminiert. Anders als JPA/JPQL unterstützt jOOQ SQL vollständig — Fensterfunktionen, CTEs, RETURNING-Klauseln und anbieterspezifische Erweiterungen sind erstklassig.