Spring Boot 4 की संपूर्ण मार्गदर्शिका · पाठ

कस्टम Spring Data रिपॉज़िटरी

जटिल डेटा संचालन के लिए कस्टम विधियों और क्वेरी परिभाषाओं के साथ Spring Data JPA रिपॉज़िटरी का विस्तार करें।

पाठ 1, कुल 4 में से11 चरण

कस्टम Spring Data रिपॉज़िटरी, CoddyKit पर Spring Boot 4 की संपूर्ण मार्गदर्शिका का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Spring Boot 4 की संपूर्ण मार्गदर्शिका सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Spring Boot 4 की संपूर्ण मार्गदर्शिका पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

कस्टम रिपॉज़िटरी का परिचय

Spring Data JPA अनावश्यक प्रारंभिक कोड को कम करने के लिए बहुत उपयोगी है, लेकिन कभी-कभी आपको बहुत विशिष्ट और जटिल डेटा संचालन की आवश्यकता होती है, जिन्हें केवल विधि नामों से तैयार नहीं किया जा सकता।

यहीं कस्टम रिपॉज़िटरी उपयोगी होती हैं! इनके माध्यम से आप अपने जटिल डेटा अभिगम तर्क को परिभाषित और लागू कर सकते हैं तथा Spring Data JPA की क्षमताओं का विस्तार कर सकते हैं।

कस्टम तर्क का उपयोग कब करें

आपको कस्टम रिपॉज़िटरी तर्क कब लिखना चाहिए? कुछ सामान्य परिस्थितियाँ इस प्रकार हैं:

  • जटिल जॉइन और एग्रीगेशन: जब मानक क्वेरी विधियाँ आपकी जॉइन या एग्रीगेशन संबंधी आवश्यकताओं को व्यक्त नहीं कर पातीं।
  • बैच संचालन: कई रिकॉर्ड पर ऐसे अपडेट या विलोपन करना जिनके लिए विशिष्ट तर्क आवश्यक हो।
  • संग्रहीत प्रक्रियाएँ: डेटाबेस-विशिष्ट संग्रहीत प्रक्रियाओं के साथ काम करना।
  • प्रदर्शन सुधार: विशिष्ट क्वेरी संकेत या अनुकूलन लागू करना।
  • व्यवसाय-विशिष्ट संचालन: डेटा अभिगम के कई चरणों को एक समेकित विधि में संयोजित करने वाला तर्क।

कस्टम इंटरफ़ेस परिभाषित करना

पहला चरण अपनी कस्टम विधियों के लिए एक इंटरफ़ेस परिभाषित करना है। यह इंटरफ़ेस उन विधियों की घोषणा करेगा जो Spring Data JPA के नियमों के अनुरूप नहीं हैं।

इसे अपने विशिष्ट डेटा संचालन की रूपरेखा समझिए।

package com.coddykit.repo;

public interface CustomUserRepository {
    void activateUsersOlderThan(int age);
    // Add more specific methods here
}

कस्टम तर्क लागू करना

इसके बाद, एक ऐसी क्लास बनाएँ जो आपके कस्टम इंटरफ़ेस को लागू करे। यहीं आप अपने जटिल डेटा संचालन के लिए वास्तविक कोड लिखेंगे।

आमतौर पर आप JPA से EntityManager या अधिक प्रत्यक्ष SQL संपर्क के लिए JdbcTemplate का उपयोग करेंगे।

package com.coddykit.repo.impl;

import com.coddykit.repo.CustomUserRepository;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import jakarta.transaction.Transactional;

public class CustomUserRepositoryImpl implements CustomUserRepository {

    @PersistenceContext
    private EntityManager entityManager;

    @Override
    @Transactional
    public void activateUsersOlderThan(int age) {
        System.out.println("Executing custom logic...");
        entityManager.createQuery(
            "UPDATE User u SET u.active = true WHERE u.age > :age")
            .setParameter("age", age)
            .executeUpdate();
    }
}

मुख्य रिपॉज़िटरी के साथ एकीकरण

अपने कस्टम कार्यान्वयन को उपलब्ध कराने के लिए, आपके मुख्य Spring Data JPA रिपॉज़िटरी इंटरफ़ेस को आपके कस्टम इंटरफ़ेस का विस्तार करना होगा।

Spring Data JPA कार्यान्वयन क्लास का स्वतः पता लगाकर उससे जुड़ जाएगा (यह अपेक्षा करता है कि कार्यान्वयन क्लास का नाम [CustomInterfaceName]Impl हो)।

package com.coddykit.repo;

import com.coddykit.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends JpaRepository<User, Long>, CustomUserRepository {
    // Standard methods from JpaRepository
    // Plus custom methods from CustomUserRepository
}

पूर्ण कस्टम रिपॉज़िटरी प्रदर्शन

आइए एक पूरा उदाहरण देखें, जिसमें कस्टम रिपॉज़िटरी का उपयोग दिखाया गया है। हम एक User एंटिटी, एक ऐसी UserRepository जो मानक और कस्टम विधियों को मिलाती है, और उसका उपयोग करने वाला Spring Boot ऐप परिभाषित करेंगे।

इस उदाहरण को चलाकर देखें:

package com.coddykit;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.transaction.Transactional;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;

// 1. User Entity
@Entity
class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private int age;
    private boolean active;

    public User() {}
    public User(String name, int age, boolean active) {
        this.name = name;
        this.age = age;
        this.active = active;
    }

    public Long getId() { return id; }
    public void setId(Long id) { this.id = id; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }
    public boolean isActive() { return active; }
    public void setActive(boolean active) { this.active = active; }

    @Override
    public String toString() {
        return "User{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + ", active=" + active + '}';
    }
}

// 2. Custom Interface
interface CustomUserRepository {
    void activateUsersOlderThan(int age);
}

// 3. Custom Implementation
class CustomUserRepositoryImpl implements CustomUserRepository {
    @PersistenceContext
    private EntityManager entityManager;

    @Override
    @Transactional
    public void activateUsersOlderThan(int age) {
        System.out.println("Activating users older than " + age + "...");
        entityManager.createQuery(
            "UPDATE User u SET u.active = true WHERE u.age > :age")
            .setParameter("age", age)
            .executeUpdate();
    }
}

// 4. Main Repository extends JpaRepository and Custom Interface
@Repository
interface UserRepository extends JpaRepository<User, Long>, CustomUserRepository {
    // Spring Data JPA methods
}

@SpringBootApplication
public class Main implements CommandLineRunner {

    @Autowired
    private UserRepository userRepository;

    public static void main(String[] args) {
        SpringApplication.run(Main.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        // Save some users
        userRepository.save(new User("Alice", 25, false));
        userRepository.save(new User("Bob", 30, false));
        userRepository.save(new User("Charlie", 35, false));

        System.out.println("--- Initial Users ---");
        userRepository.findAll().forEach(System.out::println);

        // Use custom method
        userRepository.activateUsersOlderThan(28);

        System.out.println("--- Users After Custom Update ---");
        userRepository.findAll().forEach(System.out::println);
    }
}

JPQL/HQL के लिए @Query का उपयोग

ऐसी विशिष्ट क्वेरियों के लिए जिन्हें विधि नामों से आसानी से व्यक्त नहीं किया जा सकता, आप @Query एनोटेशन का उपयोग कर सकते हैं। इसके माध्यम से आप अपनी रिपॉज़िटरी विधियों पर सीधे JPQL (Java Persistence Query Language) या HQL (Hibernate Query Language) लिख सकते हैं।

आप क्रमिक पैरामीटर (?1) या नामित पैरामीटर (:paramName) का उपयोग कर सकते हैं।

package com.coddykit.repo;

import com.coddykit.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import java.util.List;

@Repository
public interface UserRepository extends JpaRepository<User, Long> {

    @Query("SELECT u FROM User u WHERE u.age > ?1 AND u.active = true")
    List<User> findActiveUsersOlderThan(int age);

    @Query("SELECT u FROM User u WHERE u.name LIKE %:namePart%")
    List<User> findUsersWithNameContaining(@org.springframework.data.repository.query.Param("namePart") String namePart);
}

@Query के साथ नेटिव SQL क्वेरियाँ

कभी-कभी JPQL पर्याप्त नहीं होता और आपको अपने डेटाबेस के लिए विशिष्ट नेटिव SQL क्वेरियों का उपयोग करना पड़ता है (जैसे डेटाबेस-विशिष्ट फ़ंक्शन या प्रदर्शन संबंधी कारणों के लिए)।

आप @Query एनोटेशन में nativeQuery = true सेट करके ऐसा कर सकते हैं। सावधान रहें, क्योंकि अलग-अलग डेटाबेस में नेटिव क्वेरियाँ कम पोर्टेबल होती हैं।

package com.coddykit.repo;

import com.coddykit.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import java.util.List;

@Repository
public interface UserRepository extends JpaRepository<User, Long> {

    @Query(value = "SELECT * FROM User WHERE age < ?1 ORDER BY name", nativeQuery = true)
    List<User> findYoungerUsersNative(int age);

    @Query(value = "SELECT COUNT(*) FROM User WHERE active = :status", nativeQuery = true)
    long countUsersByActiveStatusNative(@org.springframework.data.repository.query.Param("status") boolean status);
}

स्पेसिफिकेशन के साथ डायनेमिक क्वेरियाँ

बदलते मानदंडों पर आधारित अत्यधिक डायनेमिक क्वेरियों (जैसे जटिल खोज फ़िल्टर) के लिए Spring Data JPA JpaSpecificationExecutor उपलब्ध कराता है।

  • यह आपको JPA Criteria API का उपयोग करके दोबारा उपयोग किए जा सकने वाले क्वेरी प्रेडिकेट परिभाषित करने देता है।
  • यह तरीका ऐसी क्वेरियाँ बनाने के लिए शक्तिशाली है जो रनटाइम पर बदलती हैं और जिनके लिए कई स्थिर @Query विधियाँ लिखने की आवश्यकता नहीं होती।
  • लचीले खोज स्क्रीन के लिए यह एक अधिक उन्नत तकनीक है।

कस्टम रिपॉज़िटरी जाँच

निम्नलिखित में से कौन-से Spring Data JPA रिपॉज़िटरी में कस्टम कार्यक्षमता जोड़ने के मान्य तरीके हैं?

दोहराव: कस्टम रिपॉज़िटरी

इस पाठ में हमने सीखा कि बुनियादी Spring Data JPA विधियों से आगे कैसे बढ़ा जा सकता है:

  • हमने कस्टम इंटरफ़ेस परिभाषित किए और जटिल, विशिष्ट डेटा अभिगम तर्क को समाहित करने के लिए उन्हें लागू किया।
  • हमने इन कस्टम कार्यान्वयनों को अपनी मुख्य रिपॉज़िटरी के साथ एकीकृत किया।
  • हमने विशिष्ट डेटा पुनर्प्राप्ति परिभाषित करने के लिए JPQL/HQL और नेटिव SQL क्वेरियों, दोनों के लिए @Query एनोटेशन का उपयोग करना सीखा।
  • हमने बदलते मानदंडों पर आधारित डायनेमिक क्वेरियाँ बनाने के लिए JpaSpecificationExecutor का संक्षिप्त परिचय लिया।

ये तकनीकें आपके Spring Boot अनुप्रयोगों में लगभग किसी भी डेटा अभिगम आवश्यकता को संभालने में आपको सक्षम बनाती हैं!

शुरुआत निःशुल्क

एआई शिक्षक के साथ Java सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
21
पाठ
84

अक्सर पूछे जाने वाले प्रश्न

क्या “कस्टम Spring Data रिपॉज़िटरी” पाठ निःशुल्क है?

हाँ — Spring Boot 4 की संपूर्ण मार्गदर्शिका अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “कस्टम Spring Data रिपॉज़िटरी” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Spring Boot 4 की संपूर्ण मार्गदर्शिका पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“कस्टम Spring Data रिपॉज़िटरी” में मैं क्या सीखूँगा?

जटिल डेटा संचालन के लिए कस्टम विधियों और क्वेरी परिभाषाओं के साथ Spring Data JPA रिपॉज़िटरी का विस्तार करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Spring Boot 4 की संपूर्ण मार्गदर्शिका का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Spring Boot 4 की संपूर्ण मार्गदर्शिका शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Spring Boot 4 की संपूर्ण मार्गदर्शिका शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“कस्टम Spring Data रिपॉज़िटरी” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Spring Boot 4 की संपूर्ण मार्गदर्शिका पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Spring Boot 4 की संपूर्ण मार्गदर्शिका पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. कस्टम Spring Data रिपॉज़िटरी
  2. NoSQL डेटाबेस का एकीकरण
  3. Spring Cache के साथ कैशिंग
  4. Flyway से डेटाबेस माइग्रेशन
← Spring Boot 4 की संपूर्ण मार्गदर्शिका पर वापस जाएँ