Güçlü Sorgu Dili: QueryDSL

fatih arslan
HAVELSAN
Published in
3 min readDec 4, 2023
QueryDSL

Merhabalar,

Bu yazımda, günümüzde her yazılım projesinin olmazsa olmazı olan veritabanı sistemlerine sorgu atmak için kullanılan yapılardan birisi olan Querydsl’i anlatmaya çalışacağım.

Querydsl, Java tabanlı projelerde kullanılan bir sorgu dilidir ve bu dil üzerinden tip güvenli sorgular oluşturmayı sağlayan bir kütüphanedir. JPA, MongoDB, SQL, Neo4j ve R2DBC gibi farklı veri kaynakları için sorgu yazmak için kullanılabilir.

Querydsl, veritabanı sorgularını Java diline entegre ederek, sorgu hatalarını derleme aşamasında tespit edebilen ve kodun daha güvenli olmasını sağlayan bir yaklaşım sunar.

Şimdi gelelim bu querydsl’in avantajlarına ve dezavantajlarına;

Avantajları:

  • Tip Güvenliği: Querydsl, Java dilinde tip güvenliği sağlar. Sorgular, Java sınıfları ve alanları tarafından desteklenir, bu da derleme aşamasında hataları tespit etmeyi kolaylaştırır ve kodun daha güvenli olmasını sağlar.
  • Okunabilirlik ve Bakım Kolaylığı: Java diline benzer bir sözdizimine sahip olması, Querydsl’nin sorguların okunabilir ve anlaşılabilir olmasını sağlar. Bu, projenin bakımını kolaylaştırır ve yeni eklenen geliştiricilerin hızlı bir şekilde adapte olmasını sağlar.
  • Dinamik Sorgular: Querydsl, dinamik sorgular oluşturmayı kolaylaştırır. Koşulları programatik olarak ekleyebilir ve sorguları dinamik olarak oluşturabilirsiniz, bu da uygulama gereksinimlerinize daha iyi uyum sağlar.
  • ORM Entegrasyonu: JPA, Hibernate gibi popüler ORM çözümleriyle entegrasyonu kolaydır. Querydsl’nin, bu ORM’lerle birlikte kullanılabilmesi, veritabanı ile etkileşimde bulunmayı ve sorguları optimize etmeyi daha etkili kılar.

Dezavantajları:

  • Öğrenme Eğrisi: Querydsl’yi kullanmaya başlamak için bir öğrenme eğrisi vardır. Özellikle daha karmaşık sorgular ve özellikler kullanılmaya başlandığında, kullanıcıların alışması zaman alabilir.
  • Karmaşıklık: Bazı basit sorgular için bile, Querydsl’nin kullanımı biraz karmaşık gelebilir. Diğer basit sorgu dillerine göre daha fazla kod yazma gereksinimi olabilir.
  • Sorgu Derleme Süresi: Querydsl, sorguları derleme süresinde oluşturur. Bu, uygulamanın başlatılma süresini biraz artırabilir. Ancak, genellikle bu artış, uygulamanın performansına önemli bir etki yapmaz.

Yazılım projelerinde teknojiler genellikle üstünkörü seçilmektedir. Unutulmaması gereken en önemli konu; ihtiyaç ve kullanılan teknolojinin bu ihtiyacı ne kadar karşılayabildiğidir. İhtiyacı karşılayan daha basit teknolojiler varsa elbette bunları seçmek daha mantıklı olacaktır.

Bu cümleden yola çıkarsak; QueryDsl, orta ve büyük ölçekli Java projelerinde sorgu yazmak için önerilen bir araçtır. Küçük ölçekli projeler için bahsi geçen dezavantajların göze alınıp alınamayacağı iyi belirlenmelidir.

Şimdi gelelim Java Spring Boot ile basit bir örnek yapmaya;

1- İlk olarak bir spring boot uygulaması(gradle tabanlı) oluşturalım.

2- QueryDsl için bağımlılıkları yüklemekle devam edellim. Build.gradle dosyasına aşağıdaki kod bloğunu eklemeniz gerekmektedir.

Build gradle querydsl bağımlılığı

3- Gradle projesini yenilemeniz(clean ve install) gerekmektedir.

4- Şimdi bir entity oluşturalım.

5- Jpa tabanlı repository oluşturmanız gerekiyor.

QueryDslPredicateExecuter sınıfı bize querydsl ile sorgulama yeteneği kazandıracaktır.

6- Şimdi basit bir rest controller tanımlayalım ve örnek bir sorgu ile querydsl örneğimizi bitirelim.

/cats/{name} rest ucumuz bize parametre olarak gelen isme göre querydsl ile jpa tabanlı repositoryde arama yapmamıza olanak sağlar.

QueryDsl ile alakalı metotlara(sıralama, gruplama vb.) querydsl’in kendi sayfasından erişebilirsiniz. Bu entegrasyonları yaptıktan sonra o metotların kullanımı da projeniz tarafından desteklenecek hale gelecektir.

Bir sonraki yazımda görüşmek dileğiyle, hoşçakalın.

--

--