Enterprise Средний

Замените строковой SQL с сырым JDBC на типобезопасный плавный SQL DSL библиотеки jOOQ.

✕ Raw JDBC
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;
}
✓ jOOQ
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);
Заметили проблему в этом коде? Сообщите нам.
🔒

Типобезопасные столбцы

Имена столбцов — это сгенерированные Java-константы; опечатки и ошибки типов становятся ошибками компиляции, а не ошибками времени выполнения.

📖

Плавность SQL

DSL jOOQ точно отражает синтаксис SQL, поэтому сложные JOIN-ы, подзапросы и CTE остаются читаемыми.

🛡️

Защита от инъекций по дизайну

Параметры всегда привязываются безопасно — никакой конкатенации строк означает никакого риска SQL-инъекции.

Старый подход
Сырой JDBC
Современный подход
jOOQ SQL DSL
Начиная с JDK
11
Сложность
Средний
JDBC против jOOQ
Доступно

Свободная версия jOOQ поддерживает все распространённые СУБД с открытым исходным кодом; более старые коммерческие СУБД требуют платной лицензии

jOOQ (Java Object Oriented Querying) генерирует Java-код из схемы базы данных, превращая имена таблиц и столбцов в типобезопасные Java-константы. Плавный DSL отражает синтаксис SQL, делая запросы читаемыми и компонуемыми. Все параметры привязываются автоматически, что устраняет риски SQL-инъекций. В отличие от JPA/JPQL, jOOQ полностью поддерживает SQL — оконные функции, CTE, RETURNING-клаузулы и расширения, специфичные для поставщика, являются первоклассными возможностями.