0Pricing
Java Academy · Ders

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

  1. JPA Ek Açıklamalarıyla Varlık Eşleme
  2. Spring Data Depoları ve Sorgu Yöntemleri
  3. Bire-Çok ve Çoka-Çok İlişkileri
  4. Sayfalama, Sıralama ve Projeksiyonlar
← Java Academy Sayfasına Dön