Spring Data Depoları ve Sorgu Yöntemleri
JpaRepository'yi genişletin, adlandırma kurallarına göre sorgu yöntemleri tanımlayın ve özel JPQL için @Query kullanın.
Spring Data Depoları ve Sorgu Yöntemleri, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.
Spring Data JPA Depoları
CRUD, sayfalama ve sıralama yöntemlerine ücretsiz olarak sahip olmak için JpaRepository<Entity, ID> arayüzünü genişletin. Spring, uygulamayı başlangıçta oluşturur — SQL veya DAO için kalıp kod yazmanız gerekmez.
public interface UserRepository extends JpaRepository<User, Long> {
// Free: findAll, findById, save, delete, count, existsById, etc.
}Türetilmiş Sorgu Yöntemleri
Spring Data, yöntem adlarından sorgular oluşturur. Adlandırma kuralı şöyledir: findBy + özellik + isteğe bağlı koşullar.
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByStatus(UserStatus status);
Optional<User> findByEmail(String email);
List<User> findByAgeGreaterThanAndStatusOrderByNameAsc(int age, UserStatus s);
boolean existsByEmail(String email);
long countByStatus(UserStatus status);
}Yöntem Adlarında Desteklenen Anahtar Sözcükler
Temel adlandırma anahtar sözcükleri: And, Or, Is/Equals, Between, LessThan/GreaterThan, Like/NotLike, In/NotIn, IsNull/IsNotNull, OrderBy, First/Top.
List<User> findTop5ByStatusOrderByCreatedAtDesc(UserStatus s);
List<User> findByNameContainingIgnoreCase(String fragment);
List<User> findByCreatedAtBetween(LocalDateTime from, LocalDateTime to);Özel JPQL için @Query
Yöntem adlarıyla ifade edilemeyen karmaşık sorgular için @Query kullanın. JPQL, tablo/sütun adları yerine varlık sınıfı adlarını ve alanları kullanır.
@Query("SELECT u FROM User u WHERE u.email = :email AND u.status = :status")
Optional<User> findActiveByEmail(@Param("email") String email,
@Param("status") UserStatus status);
@Query("SELECT u.name, COUNT(o) FROM User u JOIN u.orders o GROUP BY u.name")
List<Object[]> countOrdersPerUser();Yerel Sorgular
Ham SQL yazmak için nativeQuery = true kullanın. ON CONFLICT, pencere işlevleri veya tam metin araması gibi veritabanına özgü özellikler için kullanışlıdır.
@Query(value = "SELECT * FROM users WHERE tsv @@ plainto_tsquery(:q)",
nativeQuery = true)
List<User> fullTextSearch(@Param("q") String query);@Modifying ile Değiştirici Sorgular
Güncelleme/silme sorgularına @Modifying ek açıklamasını ekleyin. Değiştirici sorgular etkin bir işlem gerektirdiğinden @Transactional ekleyin.
@Modifying
@Transactional
@Query("UPDATE User u SET u.status = :s WHERE u.lastLogin < :cutoff")
int deactivateInactiveUsers(@Param("s") UserStatus s,
@Param("cutoff") LocalDateTime cutoff);Türetilmiş Silme Yöntemleri
Spring Data, yöntem adlarından silme sorguları da oluşturur — temizleme işlemleri için kullanışlıdır.
void deleteByStatus(UserStatus status);
long deleteByCreatedAtBefore(LocalDateTime cutoff);Depo Dilimleri: CrudRepository, PagingAndSortingRepository
Tüm JpaRepository yöntemlerine ihtiyaç duymadığınızda daha dar temel arayüzleri kullanın. CrudRepository temel CRUD işlemlerine sahiptir; PagingAndSortingRepository ise findAll(Pageable) yöntemini ekler.
public interface ReadOnlyUserRepository extends PagingAndSortingRepository<User, Long> {
// Only paging + sorting — no save/delete
}Getirme Optimizasyonu için @EntityGraph
Sorgu başına varsayılan getirme stratejisini geçersiz kılmak ve varlık eşlemesini değiştirmeden ilişkileri istekli olarak yüklemek için @EntityGraph kullanın.
@EntityGraph(attributePaths = {"orders", "orders.items"})
@Query("SELECT u FROM User u WHERE u.id = :id")
Optional<User> findWithOrders(@Param("id") Long id);Özel Depo Uygulamaları
UserRepositoryCustom + UserRepositoryCustomImpl adlandırma kuralına sahip bir arayüz ve uygulama sınıfı oluşturarak özel bir yöntem ekleyin. Spring bunları birleştirir.
public interface UserRepositoryCustom {
List<User> searchByCriteria(UserSearchCriteria criteria);
}
public class UserRepositoryCustomImpl implements UserRepositoryCustom {
@PersistenceContext EntityManager em;
public List<User> searchByCriteria(UserSearchCriteria c) {
// use Criteria API or JdbcTemplate
}
}
public interface UserRepository extends JpaRepository<User,Long>, UserRepositoryCustom {}Hızlı Kontrol
UPDATE/DELETE ifadeleriyle birlikte hangi ek açıklama gereklidir?
Özet
Ücretsiz CRUD işlemleri için JpaRepository'yi genişletin. Basit sorgular için türetilmiş yöntem adlarını kullanın. Karmaşık JPQL veya yerel SQL için @Query kullanın. Güncellemeler için @Modifying+@Transactional kullanın. Getirme işlemini ayarlamak için @EntityGraph kullanın.
Sıkça Sorulan Sorular
“Spring Data Depoları ve Sorgu Yöntemleri” dersi ücretsiz mi?
Evet — “Spring Data Depoları ve Sorgu Yöntemleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.
“Spring Data Depoları ve Sorgu Yöntemleri” dersinde ne öğreneceğim?
JpaRepository'yi genişletin, adlandırma kurallarına göre sorgu yöntemleri tanımlayın ve özel JPQL için @Query kullanın. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Java Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Spring Data Depoları ve Sorgu Yöntemleri” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- JPA Ek Açıklamalarıyla Varlık Eşleme
- Spring Data Depoları ve Sorgu Yöntemleri
- Bire-Çok ve Çoka-Çok İlişkileri
- Sayfalama, Sıralama ve Projeksiyonlar