java - पसंद के साथ वसंत जेपीए @Query




jquery sql spring jpa (8)

निम्नलिखित दृष्टिकोण का उपयोग करने का प्रयास करें (यह मेरे लिए काम करता है):

@Query("SELECT u.username FROM User u WHERE u.username LIKE CONCAT('%',:username,'%')")
List<String> findUsersWithPartOfName(@Param("username") String username);

नोटिस: जेपीक्यूएल में तालिका का नाम पूंजी पत्र से शुरू होना चाहिए।

मैं CrudRepository में एक विधि बनाने की कोशिश कर रहा हूं जो मुझे उन उपयोगकर्ताओं की सूची दे पाएगा, जिनके उपयोगकर्ता नाम इनपुट पैरामीटर की तरह हैं (न केवल आरंभ करें, बल्कि इसमें शामिल हैं)। मैंने विधि "findUserByUsernameLike(@Param("username") String username)" का उपयोग करने की कोशिश की "findUserByUsernameLike(@Param("username") String username)" लेकिन जैसा कि इसे स्प्रिंग दस्तावेज़ में बताया गया है, यह विधि " where user.username like ?1 " के बराबर है। यह मेरे लिए अच्छा नहीं है, क्योंकि मैंने पहले से ही कहा है कि मैं उन सभी उपयोगकर्ताओं को प्राप्त करने का प्रयास कर रहा हूं जिनके उपयोगकर्ता नाम में ...

मैंने विधि के लिए एक प्रश्न लिखा लेकिन यह भी तैनात नहीं करता है।

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

@Query("select u from user u where u.username like '%username%'")
List<User> findUserByUsernameLike(@Param("username") String username);
}

क्या कोई मेरी इसके साथ मदद कर सकता है?


आपके मामले के लिए, आप सीधे जेपीए विधियों का उपयोग कर सकते हैं। वह बोले की तरह है:

युक्त: चयन करें ...% की तरह: उपयोगकर्ता नाम%

List<User> findByUsernameContainingIgnoreCase(String username);

यहां, IgnoreCase मामले को अनदेखा करने के साथ आइटम खोजने में आपकी सहायता करेगा।

यहां कुछ संबंधित विधियां दी गई हैं:

  1. findByFirstnameLike पसंद है

    ... जहां x.firstname पसंद है? 1

  2. शुरू करने के साथ findByFirstnameStartingWith

    ... जहां x.firstname पसंद है? 1 (संलग्न% के साथ पैरामीटर बाध्य)

  3. समाप्त करने के साथ findByFirstnameEndingWith पहले findByFirstnameEndingWith

    ... जहां x.firstname पसंद है? 1 (पैरापेड% के साथ पैरामीटर)

  4. findByFirstnameContaining युक्त

    ... जहां x.firstname पसंद है? 1 (पैरामीटर बाध्य% में लपेटा)

अधिक जानकारी, इस लिंक और इस लिंक को देखें

आशा है कि यह आपकी मदद करेगा :)


निम्नलिखित का उपयोग करना आसान है (कोई आवश्यकता नहीं CONCAT या ||):

@Query("from Service s where s.category.typeAsString like :parent%")
List<Service> findAll(@Param("parent") String parent);

में प्रलेखित: http://docs.spring.io/spring-data/jpa/docs/current/reference/html


एक और तरीका: इसके बजाय CONCAT फ़ंक्शन हम डबल पाइप का उपयोग कर सकते हैं :: lastname || '%'

@Query("select c from Customer c where c.lastName LIKE :lastname||'%'")
List<Customer> findCustomByLastName( @Param("lastname") String lastName);

आप कहीं भी, उपसर्ग, प्रत्यय या दोनों डाल सकते हैं

:lastname ||'%'  
'%' || :lastname  
'%' || :lastname || '%'  

List<User> findByUsernameContainingIgnoreCase(String username);

मामले के मुद्दों को नजरअंदाज करने के लिए


@Query("select u from user u where u.username LIKE :username")
List<User> findUserByUsernameLike(@Param("username") String username);

विधि नामों से क्वेरी निर्माण का उपयोग करके, तालिका 4 जांचें जहां वे कुछ कीवर्ड समझाते हैं।

  1. पसंद का उपयोग: चुनें ... जैसे: उपयोगकर्ता नाम

    List<User> findByUsernameLike(String username);
    
  2. प्रारंभ करने के साथ: चुनें ... जैसे: उपयोगकर्ता नाम%

    List<User> findByUsernameStartingWith(String username);
    
  3. समापन के साथ: चुनें ... जैसे%: उपयोगकर्ता नाम

    List<User> findByUsernameEndingWith(String username);
    
  4. युक्त: चयन करें ...% की तरह: उपयोगकर्ता नाम%

    List<User> findByUsernameContaining(String username);
    

ध्यान दें कि जो उत्तर आप खोज रहे हैं वह नंबर 4 है । आपको @Query का उपयोग करने की आवश्यकता नहीं है


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

  • @Component - जेनेरिक और एप्लिकेशन में इस्तेमाल किया जा सकता है।
  • सेवा सेवा स्तर पर @ सेवा - एनोटेट कक्षाएं।
  • @ नियंत्रक - प्रेजेंटेशन परत स्तर पर एनोटेट कक्षाएं, मुख्य रूप से स्प्रिंग एमवीसी में उपयोग की जाती हैं।
  • @Repository - दृढ़ता परत पर एनोटेट कक्षाएं, जो डेटाबेस भंडार के रूप में कार्य करेगी।




java jquery sql spring jpa