JDBC versus jOOQ
Remplace le SQL basé sur des chaînes de JDBC brut par le DSL SQL avec sécurité de types et fluide de 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);
Colonnes avec sécurité de types
Les noms de colonnes sont des constantes Java générées — les fautes de frappe et types incompatibles deviennent des erreurs de compilation.
Fluidité SQL
Le DSL de jOOQ reflète étroitement la syntaxe SQL, donc les JOINs complexes, sous-requêtes et CTEs restent lisibles.
Sans injection par conception
Les paramètres sont toujours liés de façon sécurisée — sans concaténation de chaînes signifie sans risque d'injection SQL.
L'édition open-source de jOOQ supporte toutes les bases de données open-source principales ; les bases de données commerciales anciennes nécessitent une licence payante
jOOQ (Java Object Oriented Querying) génère du code Java à partir du schéma de votre base de données, convertissant les noms de tables et colonnes en constantes Java avec sécurité de types. Le DSL fluide reflète la syntaxe SQL pour que les requêtes soient lisibles et composables. Tous les paramètres sont liés automatiquement, éliminant le risque d'injection SQL. Contrairement à JPA/JPQL, jOOQ embrasse pleinement SQL — les fonctions de fenêtre, les CTEs, les clauses RETURNING et les extensions spécifiques aux fournisseurs sont de première classe.