JDBC বনাম jOOQ
jOOQ-এর টাইপ-সেফ, ফ্লুয়েন্ট SQL DSL ব্যবহার করে Raw JDBC স্ট্রিং-ভিত্তিক SQL প্রতিস্থাপন করুন।
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);
টাইপ-সেফ কলাম
কলামের নামগুলো জেনারেট করা জাভা কনস্ট্যান্ট হয় – টাইপো এবং টাইপের অমিল রানটাইম ফেইলুরের পরিবর্তে কম্পাইলার এরর হিসাবে ধরা পড়ে।
SQL ফ্লুয়েন্সি
jOOQ DSL SQL সিনট্যাক্সকে ঘনিষ্ঠভাবে প্রতিফলিত করে, তাই জটিল JOINs, সাবকোয়েরি (subqueries) এবং CTEs সহজেই পঠনযোগ্য থাকে।
ডিজাইন দ্বারা ইনজেকশন-মুক্ত
প্যারামিটারগুলি সর্বদা নিরাপদে বাইন্ড থাকে – স্ট্রিং কনক্যাটেনেশন (string concatenation) না থাকায় SQL ইনজেকশনের কোনো ঝুঁকি থাকে না।
jOOQ ওপেন-সোর্স সংস্করণ সমস্ত প্রধান ওপেন-সোর্স ডেটাবেস সমর্থন করে; পুরানো বাণিজ্যিক ডাটাবেস একটি প্রদত্ত লাইসেন্স প্রয়োজন
jOOQ (Java Object Oriented Querying) আপনার ডেটাবেস স্কিমা থেকে জাভা কোড জেনারেট করে, টেবিল এবং কলামের নামগুলোকে টাইপ-সেফ জাভা কনস্ট্যান্টে রূপান্তরিত করে। এর ফ্লুয়েন্ট DSL SQL সিনট্যাক্সকে প্রতিফলিত করে, ফলে কোয়েরিগুলো পঠনযোগ্য এবং কম্পোজেবল (composable) থাকে। সমস্ত প্যারামিটার স্বয়ংক্রিয়ভাবে বাইন্ড (bind) হয়, যা SQL ইনজেকশনের ঝুঁকি দূর করে। JPA/JPQL-এর বিপরীতে, jOOQ সম্পূর্ণরূপে SQL-কে সমর্থন করে – উইন্ডো ফাংশন, CTEs, RETURNING ক্লজ এবং ভেন্ডর-নির্দিষ্ট এক্সটেনশনগুলো এখানে ফার্স্ট-ক্লাস ফিচার।