Enterprise Średniozaawansowany

Zastąp surowy JDBC oparty na ciągach SQL typowo-bezpiecznym, płynnym DSL SQL 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);
Widzisz problem z tym kodem? Daj nam znać.
🔒

Typowo-bezpieczne kolumny

Nazwy kolumn to generowane stałe Java — literówki i niezgodności typów stają się błędami kompilatora zamiast awarii w środowisku uruchomieniowym.

📖

Płynność SQL

DSL jOOQ ściśle odzwierciedla składnię SQL, więc złożone JOIN-y, podzapytania i CTE pozostają czytelne.

🛡️

Bezpieczny przed injection z założenia

Parametry są zawsze wiązane bezpiecznie — bez konkatenacji ciągów, bez ryzyka SQL injection.

Stare podejście
Surowy JDBC
Nowoczesne podejście
jOOQ SQL DSL
Od JDK
11
Poziom trudności
Średniozaawansowany
JDBC kontra jOOQ
Dostępne

Wersja open-source jOOQ obsługuje wszystkie główne bazy open-source; starsze komercyjne bazy wymagają płatnej licencji

jOOQ (Java Object Oriented Querying) generuje kod Java ze schematu bazy danych, zamieniając nazwy tabel i kolumn w typowo-bezpieczne stałe Java. Płynny DSL odzwierciedla składnię SQL, więc zapytania są czytelne i kompozycyjne. Wszystkie parametry są wiązane automatycznie, eliminując ryzyko SQL injection. W przeciwieństwie do JPA/JPQL, jOOQ w pełni przyjmuje SQL — funkcje okienkowe, CTE, klauzule RETURNING i rozszerzenia specyficzne dla dostawcy są w nim pierwszoklasowe.