JDBC versus jOOQ
Reemplaza el SQL basado en cadenas de JDBC crudo por el DSL SQL con seguridad de tipos y fluido 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);
Columnas con seguridad de tipos
Los nombres de columnas son constantes Java generadas — errores tipográficos y tipos incompatibles se convierten en errores de compilación en lugar de fallos en tiempo de ejecución.
Fluidez SQL
El DSL de jOOQ refleja la sintaxis SQL de cerca, por lo que JOINs complejos, subconsultas y CTEs siguen siendo legibles.
Libre de inyección por diseño
Los parámetros siempre se vinculan de forma segura — sin concatenación de cadenas significa sin riesgo de inyección SQL.
La edición open-source de jOOQ soporta todas las bases de datos open-source principales; las bases de datos comerciales antiguas requieren una licencia de pago
jOOQ (Java Object Oriented Querying) genera código Java a partir del esquema de tu base de datos, convirtiendo los nombres de tablas y columnas en constantes Java con seguridad de tipos. El DSL fluido refleja la sintaxis SQL para que las consultas sean legibles y componibles. Todos los parámetros se vinculan automáticamente, eliminando el riesgo de inyección SQL. A diferencia de JPA/JPQL, jOOQ abraza SQL completamente — funciones de ventana, CTEs, cláusulas RETURNING y extensiones específicas del proveedor son de primera clase.