JDBC versus jOOQ
Substitua SQL baseado em strings com JDBC puro pela DSL SQL type-safe e fluente do 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);
Colunas type-safe
Nomes de colunas são constantes Java geradas — erros de digitação e incompatibilidades de tipo se tornam erros de compilação em vez de falhas em tempo de execução.
Fluência SQL
A DSL do jOOQ espelha a sintaxe SQL de perto, então JOINs complexos, subqueries e CTEs continuam legíveis.
Livre de injection por design
Parâmetros são sempre vinculados com segurança — sem concatenação de strings significa sem risco de SQL injection.
A edição open-source do jOOQ suporta todos os principais bancos de dados open-source; bancos comerciais mais antigos requerem licença paga
jOOQ (Java Object Oriented Querying) gera código Java a partir do esquema do banco de dados, transformando nomes de tabelas e colunas em constantes Java type-safe. A DSL fluente espelha a sintaxe SQL, tornando as consultas legíveis e composíveis. Todos os parâmetros são vinculados automaticamente, eliminando o risco de SQL injection. Diferente do JPA/JPQL, o jOOQ abraça o SQL por completo — window functions, CTEs, cláusulas RETURNING e extensões específicas de cada banco são cidadãos de primeira classe.