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

व्युत्पन्न क्वेरी विधियाँ और कीवर्ड निर्धारण

Spring Data के प्रॉपर्टी-कीवर्ड व्याकरण से केवल विधि नामों के आधार पर जटिल रिपॉज़िटरी क्वेरी बनाइए।

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

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

Derived Query Methods क्या होते हैं

Spring Data JPA केवल रिपॉज़िटरी मेथड का नाम पढ़कर पूरी SQL क्वेरी बना सकता है। आप मेथड का सिग्नेचर लिखते हैं, उसका बॉडी फ्रेमवर्क पर छोड़ देते हैं, और Spring स्टार्टअप के समय नाम को पार्स करके क्वेरी में बदल देता है।

  • @Query एनोटेशन की आवश्यकता नहीं
  • हाथ से लिखी हुई JPQL या SQL की आवश्यकता नहीं
  • मेथड का नाम ही क्वेरी का विनिर्देशन होता है

इसे derived query method कहा जाता है, क्योंकि क्वेरी मेथड के नाम से व्युत्पन्न होती है।

public interface UserRepository extends JpaRepository<User, Long> {

    // Spring derives: SELECT u FROM User u WHERE u.email = ?1
    User findByEmail(String email);
}

Subject और Predicate

हर derived method नाम दो भागों में विभाजित होता है:

  • subject (जैसे findBy, readBy, queryBy, getBy जैसा परिचायक), जो Spring को बताता है कि कौन-सी कार्रवाई करनी है।
  • predicate (By के बाद का पूरा भाग), जो WHERE क्लॉज़ बन जाता है।

findByLastName में find subject है और LastName वह predicate है जो lastName एंटिटी प्रॉपर्टी से मैप होता है।

public interface CustomerRepository extends JpaRepository<Customer, Long> {

    List<Customer> findByLastName(String lastName);

    List<Customer> readByCity(String city);  // 'readBy' works too

    Customer getById(Long id);               // 'getBy' works too
}

And / Or से शर्तों को संयोजित करना

आप And और Or कीवर्ड का उपयोग करके कई प्रॉपर्टी को जोड़ सकते हैं। श्रृंखला में आने वाली हर प्रॉपर्टी का नाम एंटिटी के फ़ील्ड से मेल खाना चाहिए, और मेथड के पैरामीटर उसी क्रम में बाएँ से दाएँ बाँधे जाते हैं, जिस क्रम में वे दिखाई देते हैं।

  • findByFirstNameAndLastName → WHERE first_name = ?1 AND last_name = ?2
  • findByCityOrCountry → WHERE city = ?1 OR country = ?2
public interface CustomerRepository extends JpaRepository<Customer, Long> {

    List<Customer> findByFirstNameAndLastName(String firstName, String lastName);

    List<Customer> findByCityOrCountry(String city, String country);
}

तुलना वाले कीवर्ड

समानता के अलावा, Spring Data प्रॉपर्टी के नाम के बाद लगाए जाने वाले कई तुलना कीवर्ड समझता है:

  • LessThan, LessThanEqual, GreaterThan, GreaterThanEqual
  • Between — दो पैरामीटर आवश्यक
  • Before, After — तारीखों के लिए उपयोगी

कीवर्ड उससे ठीक पहले वाली प्रॉपर्टी पर लागू होता है, इसलिए findByAgeGreaterThan में age प्रॉपर्टी को लक्ष्य बनाया जाता है।

public interface ProductRepository extends JpaRepository<Product, Long> {

    List<Product> findByPriceLessThan(BigDecimal max);

    List<Product> findByPriceBetween(BigDecimal low, BigDecimal high);

    List<Product> findByCreatedAtAfter(LocalDateTime since);
}

Null, True और Boolean कीवर्ड

कुछ कीवर्ड में कोई पैरामीटर नहीं होता, क्योंकि शर्त नाम में ही तय होती है:

  • IsNull / IsNotNull → IS NULL / IS NOT NULL
  • True / False → किसी boolean प्रॉपर्टी की तुलना true/false से करते हैं

ध्यान दें कि findByActiveTrue() की पैरामीटर सूची खाली है — मान कीवर्ड से ही तय होता है।

public interface AccountRepository extends JpaRepository<Account, Long> {

    List<Account> findByDeletedAtIsNull();

    List<Account> findByActiveTrue();

    List<Account> findByActiveFalse();
}

स्ट्रिंग मिलान वाले कीवर्ड

टेक्स्ट कॉलम के लिए Spring Data ऐसे कीवर्ड उपलब्ध कराता है, जो LIKE पैटर्न में बदल जाते हैं:

  • Like — वाइल्डकार्ड (%) आपको स्वयं देने होते हैं
  • StartingWith — अपने आप % जोड़ता है
  • EndingWith — शुरुआत में % जोड़ता है
  • Containing — मान को %value% में घेरता है
  • IgnoreCase — तुलना को बड़े-छोटे अक्षरों से स्वतंत्र बनाता है
public interface CustomerRepository extends JpaRepository<Customer, Long> {

    List<Customer> findByEmailContaining(String fragment);

    List<Customer> findByLastNameStartingWith(String prefix);

    List<Customer> findByLastNameIgnoreCase(String lastName);
}

OrderBy से परिणामों का क्रम निर्धारित करना

आप OrderBy के बाद प्रॉपर्टी और दिशा (Asc या Desc) लिखकर सीधे मेथड नाम में क्रम निर्धारण शामिल कर सकते हैं। यह predicate के बिल्कुल अंत में आता है।

  • findByLastNameOrderByFirstNameAsc
  • findByActiveTrueOrderByCreatedAtDesc

कॉल के समय गतिशील क्रम निर्धारण के लिए, नाम में इसे निश्चित रूप से लिखने के बजाय Sort पैरामीटर देना बेहतर है।

public interface CustomerRepository extends JpaRepository<Customer, Long> {

    List<Customer> findByLastNameOrderByFirstNameAsc(String lastName);

    // Dynamic sort, supplied by the caller
    List<Customer> findByCity(String city, Sort sort);
}

First और Top से परिणाम सीमित करना

वापस आने वाली पंक्तियों की संख्या सीमित करने के लिए subject के ठीक बाद First या Top जोड़ें। दोनों एक-दूसरे के समान हैं, और वैकल्पिक संख्या सीमा तय करती है।

  • findFirstByOrderByCreatedAtDesc → सबसे नई एकल पंक्ति
  • findTop3ByCategory → उस श्रेणी की अधिकतम 3 पंक्तियाँ

OrderBy के साथ मिलकर, रिकॉर्ड में से “सबसे हाल के N” रिकॉर्ड प्राप्त करने का यह प्रचलित तरीका है।

public interface OrderRepository extends JpaRepository<Order, Long> {

    Order findFirstByCustomerIdOrderByPlacedAtDesc(Long customerId);

    List<Order> findTop5ByStatusOrderByPlacedAtDesc(String status);
}

नेस्टेड प्रॉपर्टी तक पहुँचना

Derived queries संबंधित एंटिटी के भीतर तक पहुँच सकती हैं। यदि Order में Customer है और customer में address.city है, तो आप findByCustomerAddressCity लिख सकते हैं।

Spring पथ को लालचपूर्वक हल करता है और camel-case के बड़े अक्षरों वाले हिस्सों पर विभाजित करता है। जब किसी प्रॉपर्टी का नाम स्वयं अस्पष्ट हो (जैसे customerAddress नाम का वास्तविक फ़ील्ड), तो सीमा स्पष्ट करने के लिए अंडरस्कोर डालें: findByCustomer_AddressCity।

public interface OrderRepository extends JpaRepository<Order, Long> {

    // Order -> customer -> address -> city
    List<Order> findByCustomerAddressCity(String city);

    // Explicit traversal boundary with underscore
    List<Order> findByCustomer_AddressCity(String city);
}

गिनती, अस्तित्व और विलोपन

subject कीवर्ड केवल चयन नहीं, बल्कि ऑपरेशन नियंत्रित करता है। find के अलावा आप ये भी व्युत्पन्न कर सकते हैं:

  • countBy... → long लौटाता है
  • existsBy... → boolean लौटाता है
  • deleteBy... / removeBy... → मेल खाने वाली पंक्तियाँ हटाता है (@Transactional के साथ उपयोग करें)

predicate का व्याकरण वही रहता है; केवल रिटर्न प्रकार और कार्रवाई बदलते हैं।

public interface UserRepository extends JpaRepository<User, Long> {

    long countByActiveTrue();

    boolean existsByEmail(String email);

    @Transactional
    long deleteByLastLoginBefore(LocalDateTime cutoff);
}

कीवर्ड का समाधान वास्तव में कैसे काम करता है

ऐप्लिकेशन स्टार्टअप के समय Spring Data हर मेथड नाम को एक PartTree में पार्स करता है। हर खंड के लिए यह पहले सबसे लंबे मेल खाते प्रॉपर्टी पथ को खोजता है, फिर अंत में लगे कीवर्ड अलग करता है।

  • यह हर प्रॉपर्टी को एंटिटी के मेटामॉडल के विरुद्ध सत्यापित करता है — findByemaill जैसी टाइपो PropertyReferenceException के साथ तुरंत विफल हो जाती है।
  • पार्सिंग स्टार्टअप पर होती है, इसलिए गलत मेथड नाम पहली कॉल पर नहीं, बल्कि तुरंत कॉन्टेक्स्ट को विफल कर देते हैं।

यह शुद्ध-Java उदाहरण वही camel-case विभाजन का विचार दिखाता है, जिसका उपयोग पार्सर करता है।

public class PartTreeDemo {
    public static void main(String[] args) {
        String predicate = "FirstNameAndLastName";
        String[] parts = predicate.split("And");
        for (String p : parts) {
            // Lower-case the first letter to get the property name
            String prop = Character.toLowerCase(p.charAt(0)) + p.substring(1);
            System.out.println("Property: " + prop);
        }
    }
}

त्वरित जाँच

आपको किसी दिए गए status के लिए सबसे हाल में रखे गए 3 ऑर्डर लौटाने वाला रिपॉज़िटरी मेथड चाहिए, जिसमें सबसे नया पहले आए। सही derived method नाम कौन-सा है?

पुनरावलोकन

अब आप जानते हैं कि मेथड नामों से सीधे क्वेरी कैसे बनाई जाती हैं:

  • Subject (find/read/get/count/exists/delete) ऑपरेशन तय करता है; By के बाद का predicate WHERE क्लॉज़ बन जाता है।
  • फ़ील्ड को And/Or से जोड़ें; LessThan, Between, After से तुलना करें; Containing, StartingWith, IgnoreCase से टेक्स्ट का मिलान करें।
  • पैरामीटर-रहित कीवर्ड: IsNull, True, False।
  • OrderBy...Asc/Desc (या Sort पैरामीटर) से क्रम निर्धारित करें; First/Top[N] से सीमा लगाएँ।
  • संबंधों के भीतर जाएँ (findByCustomerAddressCity; अस्पष्टता दूर करने के लिए _ का उपयोग करें)।
  • Spring स्टार्टअप पर नामों को PartTree में पार्स करता है, इसलिए अमान्य प्रॉपर्टी पथ तुरंत विफल हो जाते हैं।

बहुत लंबे या जटिल नामों के लिए @Query का उपयोग करें — चतुराई से अधिक महत्वपूर्ण पठनीयता है।

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

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

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

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

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

क्या “व्युत्पन्न क्वेरी विधियाँ और कीवर्ड निर्धारण” पाठ निःशुल्क है?

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

“व्युत्पन्न क्वेरी विधियाँ और कीवर्ड निर्धारण” में मैं क्या सीखूँगा?

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

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

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

“व्युत्पन्न क्वेरी विधियाँ और कीवर्ड निर्धारण” पाठ पूरा करने में कितना समय लगता है?

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

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

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

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

  1. व्युत्पन्न क्वेरी विधियाँ और कीवर्ड निर्धारण
  2. @Query के साथ JPQL और नेटिव क्वेरी
  3. स्पेसिफिकेशन और मानदंड-आधारित गतिशील फ़िल्टरिंग
  4. पृष्ठांकन, क्रमबद्धता और स्लाइस स्ट्रीमिंग
← Spring Boot 4 की संपूर्ण मार्गदर्शिका पर वापस जाएँ