Das Spring Data Projekt im Allgemeinen ist ein Umbrella-Projekt mit folgendem Leitbild:
... bieten ein vertrautes und konsistentes Frühling-basiertes Programmiermodell, während filialspezifischen Funktionen und Fähigkeiten zu halten.
So nähern wir uns dem Persistenzraum im Allgemeinen nicht nur relationalen Datenzugriff durch JPA. Das wichtige Stück hier ist zweifach:
- Programmiermodell statt generische API
- Unterstützung für Speicher Besonderheiten
Da der Datenzugriffs Raum so vielfältig ist in diesen Tage, versuchen, alle zu nähern Die Geschäfte mit einer einheitlichen API sind zum Scheitern verurteilt. Sie würden mit einem kleinsten gemeinsamen Nenner enden, der die Laden spezifischen Teile verbirgt - in Zeiten, in denen Sie selektiv einen bestimmten Laden wählen weil seiner Spezifika. Abstrahieren diese weg völlig unterminiert dies. Insbesondere der Versuch, JPA zu verwenden, ist unserer Meinung nach falsch, da es per Definition eng mit relationalen Konzepten (@Table
, Joins, Transaktionen) verbunden ist.
Dennoch möchten Sie nicht mit völlig verschiedenen APIs arbeiten, wollen nicht in Store-Unterschiede verloren gehen, wenn Sie mit mehreren arbeiten oder von einem Projekt zum anderen wechseln. Spring hat in dieser Hinsicht traditionell dazu beigetragen, ein konsistentes Programmiermodell zu verwenden, das Abstraktionen enthält, die auf die gleiche Weise funktionieren, aber immer noch für eine bestimmte Technologie spezifisch sind. Zum Beispiel sind JDBC und JMS völlig unterschiedliche Technologien. Spring bietet sowohl einen JdbcTemplate
als auch einen JmsTemplate
an, die dieselben Verantwortlichkeiten abdecken (Ressourcenmanagement und Ausnahmeübersetzung) und die Lernkurve verringern, wenn Sie von JDBC zu JMS oder umgekehrt wechseln.
Spring Data greift darauf zu, indem es geschäftsspezifische Funktionen durch Abstraktionen kennt, die die Entwickler von Spring kennen. Ich habe bereits die Vorlage erwähnt, aber das beinhaltet auch allgemeine Konfigurationsmechanismen (XML-Namespaces, unter Verwendung von DI und AOP usw.).
Repositorys
Die oberste Schicht dieses Programmiermodell ist die Abstraktion Repository. In seinem Kern vereinfacht es die Entwicklung von Datenzugriffsschichten erheblich, da Sie vermeiden können, mehr Implementierungscode zu schreiben als unbedingt erforderlich. Es bietet CRUD-Funktionalität (out of the box), Paginierung sowie deklarative Abfragemethoden.
Angenommen, eine Customer
Domain-Klasse.Aktivieren der Persistenz für es ist nur eine Frage der ein Repository-Schnittstelle wie folgt erklärt:
interface CustomerRepository extends PagingAndSortingRepository<Customer, Long> {
List<Customer> findByLastnameContaining(String lastname);
}
Jetzt ist es eine Frage der Konfiguration (und Domain-Klasse-Mapping) in der Lage sein, eine Instanz dieser Schnittstelle zu erstellen und sie von einem verwenden Klient. PagingAndSortingRepository
enthält grundlegende CRUD-Funktionalität sowie Sachen wie Page<Customer> findAll(Pageable pageable)
(so Seite-für-Seite-Zugriff). Wie Sie sehen können, unterstützen wir auch einen Abfrageableitungsmechanismus, damit Sie keinen Implementierungscode für einfache Abfragen schreiben müssen. Für komplexere erlauben wir die manuelle Deklaration (z. B. mit @Query
auf der Methode) oder sogar die manuelle Implementierung, falls erforderlich.
Eine nette Nebenwirkung hier ist, dass Sie mit einem Flip-Schalter in der Konfiguration die gleiche Repository-Schnittstelle verwenden können, um Customer
Instanzen in einer MongoDB zu erhalten. Das heißt nicht, dass wir uns blind von einem Laden zum nächsten bewegen, da die Geschäfte in der Regel eine Anpassung des Datenmodells benötigen, um effizient arbeiten zu können. Entwickler können jedoch schnell zwischen Projekten wechseln, die mit verschiedenen Speichern arbeiten, da die Repositories auf die gleiche Weise arbeiten (indem das Programmiermodell über den üblichen API-Ansatz implementiert wird).
JPA Besonderheiten
Spring Data JPA ist eigentlich eine dünne Schicht auf das Repository Abstraktion sowie ein paar andere Glocken und Trillerpfeifen zu implementieren. Wir ersetzen also Persistenzanbieter nicht, sondern setzen sie tatsächlich über die API ein und mildern sogar einige Eigenarten und Unterschiede zwischen einzelnen JPA-Anbietern.
Sie fragen nach Spring Data JPA? – dhamibirendra
ja dieses Frühjahr Daten jpa: http://projects.spring.io/spring-data-jpa/ – user1099123
Spring Data JPA implementiert automatisch gemeinsame JPA-Datenzugriffsmethoden für Sie nur basierend auf den Entity-Objekten. Es basiert auf Grails Object Relational Mapping (GORM) und verwendet die gleichen Konventionen. Die Namen der automatisch erstellten Methoden beschreiben auch, was die Methode zurückgibt. Wenn Sie ein Objekt Foo mit Eigenschaftsleiste haben und alle Foos eines bestimmten Balkens finden möchten, rufen Sie einfach die automatisch erstellte Methode Foo.findByBar() auf. Nehmen wir an, Foo hat eine dateCreated -Eigenschaft und Sie möchten alle Foos finden, die in einem bestimmten Zeitraum erstellt wurden. Verwenden Sie also Foo.findByDateCreatedBetween (firstDate, secondDate) –