तो, spring-data
कुछ अतिरिक्त जादू करता है जो जटिल प्रश्नों के साथ मदद करता है। यह पहली बार में अजीब है और आप इसे डॉक्स में पूरी तरह से छोड़ देते हैं लेकिन यह वास्तव में शक्तिशाली और उपयोगी है।
इसमें एक रिवाज Repository
और एक कस्टम `रिपोजिटरीइम्प्ल 'बनाने और स्प्रिंग को यह बताने के लिए कि इसमें कहां शामिल है। यहाँ एक उदाहरण है:
कॉन्फ़िगरेशन क्लास - आपके रिपॉजिटरी पैकेज की ओर इशारा करते हुए एनोटेशन के साथ आपके अभी-भी-ज़रूरी xml कॉन्फिगरेशन की ओर इशारा करता है (यह *Impl
अब उन कक्षाओं के लिए दिखता है :
@Configuration
@EnableJpaRepositories(basePackages = {"com.examples.repositories"})
@EnableTransactionManagement
public class MyConfiguration {
}
jpa-repositories.xml - बताएं Spring
कि आपकी रिपॉजिटरी कहां मिलेगी। फ़ाइल नाम के Spring
साथ कस्टम रिपॉजिटरी देखने के लिए भी कहें CustomImpl
:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<jpa:repositories base-package="com.example.repositories" repository-impl-postfix="CustomImpl" />
</beans>
MyObjectRepository
- यह वह जगह है जहाँ आप एनोटेट और अननोनोटेड क्वेरी मेथड डाल सकते हैं। ध्यान दें कि यह रिपॉजिटरी इंटरफ़ेस किस तरह का विस्तार करता Custom
है:
@Transactional
public interface MyObjectRepository extends JpaRepository<MyObject, Integer>, MyObjectRepositoryCustom {
List<MyObject> findByName(String name);
@Query("select * from my_object where name = ?0 or middle_name = ?0")
List<MyObject> findByFirstNameOrMiddleName(String name);
}
MyObjectRepositoryCustom
- रिपॉजिटरी विधियाँ जो अधिक जटिल हैं और एक सरल क्वेरी या एनोटेशन के साथ नियंत्रित नहीं की जा सकती हैं:
public interface MyObjectRepositoryCustom {
List<MyObject> findByNameWithWeirdOrdering(String name);
}
MyObjectRepositoryCustomImpl
- जहां आप वास्तव में उन तरीकों को एक स्वत EntityManager
: लागू करते हैं :
public class MyObjectRepositoryCustomImpl implements MyObjectRepositoryCustom {
@Autowired
private EntityManager entityManager;
public final List<MyObject> findByNameWithWeirdOrdering(String name) {
Query query = query(where("name").is(name));
query.sort().on("whatever", Order.ASC);
return entityManager.find(query, MyObject.class);
}
}
आश्चर्यजनक रूप से, यह सब एक साथ आता है और दोनों इंटरफेस (और CRUD इंटरफ़ेस, जिसे आप लागू करते हैं) से विधियाँ दिखाई देती हैं:
myObjectRepository.
तुम देखोगे:
myObjectRepository.save()
myObjectRepository.findAll()
myObjectRepository.findByName()
myObjectRepository.findByFirstNameOrMiddleName()
myObjectRepository.findByNameWithWeirdOrdering()
यह वास्तव में काम करता है। और आपको क्वेरी करने के लिए एक इंटरफ़ेस मिलता है। spring-data
वास्तव में एक बड़े अनुप्रयोग के लिए तैयार है। और जितने अधिक प्रश्न आप सरल या एनोटेशन में कर सकते हैं, उतने ही बेहतर हैं।
यह सब स्प्रिंग डेटा जपा साइट पर प्रलेखित है ।
सौभाग्य।