JDBC ile jOOQ Karşılaştırması
Ham JDBC dize tabanlı SQL'i jOOQ'nun tür-güvenli, akıcı SQL DSL'i ile değiştirin.
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);
Tür-güvenli sütunlar
Sütun adları üretilmiş Java sabitleridir — yazım hataları ve tür uyumsuzlukları çalışma zamanı hataları yerine derleyici hatalarına dönüşür.
SQL akıcılığı
jOOQ DSL, SQL söz dizimini yakından yansıtır; karmaşık JOIN'ler, alt sorgular ve CTE'ler okunabilir kalır.
Tasarım gereği enjeksiyonsuz
Parametreler her zaman güvenli şekilde bağlanır — dize birleştirme olmadığından SQL enjeksiyonu riski yoktur.
jOOQ açık kaynak sürümü tüm büyük açık kaynak veritabanlarını destekler; eski ticari veritabanlar ücretli lisans gerektirir
jOOQ (Java Object Oriented Querying), veritabanı şemanızdan Java kodu üretir; tablo ve sütun adlarını tür-güvenli Java sabitlerına dönüştürür. Akıcı DSL, SQL söz dizimini yansıtır; böylece sorgular okunabilir ve birleştirilebilir olur. Tüm parametreler otomatik olarak bağlanır ve SQL enjeksiyonu riski ortadan kalkar. JPA/JPQL'den farklı olarak jOOQ, SQL'i tam anlamıyla benimser — pencere fonksiyonları, CTE'ler, RETURNING cümleleri ve satıcıya özgü uzantılar birinci sınıf desteklenir.