Spring Data – Teil 1: Commons
21.12.2011 | 2 Minuten Lesezeit
Mit dem Spring Data Projekt verfolgt SpringSource das Ziel, ein gemeinsames API sowohl für den Zugriff auf NoSQL -Datastores als auch altbewährte relationale Datenbanken bereitzustellen. Spring Data ist ein Mantelprojekt, das neben allgemeinen Aspekten – wie etwa dem Blättern in großen Datenmengen – Unterprojekte für die verschiedenen Arten von Persistenz-Technologien umfasst.
In einer losen Serie von Blog-Einträgen möchte ich jeweils ausgewählte Aspekte aus den einzelnen Data-Projekten vorstellen. Beginnen möchte ich mit
Spring Data Commons
Das Projekt Spring Data Commons stellt allgemeine Infrastruktur und Interfaces für die anderen, konkreteren Data-Projekte zur Verfügung. Unabhängig von der Art des Datastores unterstützt Spring Data mit einem einheitlichen API folgende Aspekte:
- Ausführen von CRUD (create, read, update, delete) Operationen
- Sortierung
- Seitenweises Lesen (Pagination)
Von zentraler Bedeutung sind dabei die Interfaces im Package org.springframework.data.repository
:
Bei dem Interface Repository
handelt es sich lediglich um ein Marker-Interface, interessanter wird es beim CrudRepository
. Dieses definiert einheitlich die allseits beliebten CRUD-Operationen (Create, Read, Update und Delete). Eine weitere Spezialisierung PagingAndSortingRepository
bietet allgemeine Finder-Methoden an, die Sortierung und Blättern unterstützen. Allen Interfaces ist gemein, dass sie mittels Generics eine Typisierung der Entität sowie des Suchschlüssels vornehmen.
Für die folgenden Beispiele soll User
unser persistentes Domain-Objekt sein, dass einen Schlüssel vom Typ String
hat.
Sortierung
Unser User-Repository definieren wir wie folgt …
1public interface UserRepository extends PagingAndSortingRepository<User, String> { 2}
… und verwenden es anschließend, um nach den zwei Attributen id
und fullName
aufsteigend bzw. absteigend zu suchen:
1@Autowired UserRepository userRepo; 2... 3public Iterable<User> getSortedUsers() { 4 return userRepo.findAll( new Sort( 5 new Sort.Order(Sort.Direction.ASC, "id"), 6 new Sort.Order(Sort.Direction.DESC, "fullName") 7 ) 8 ); 9}
Pagination
Auch das Blättern gestaltet sich sehr komfortabel:
1Page<User> page = userRepo.findAll( new PageRequest(2, 20) ); 2List<User> users = page.getContent(); 3...
Im obigen Beispiel verwenden wir eine Blockgröße von 20 und fragen den 2. Block an. Ein Page
-Objekt stellt neben den eigentlichen Suchergebnissen auch Informationen über Gesamtanzahl an Treffern, aktueller Seite und einigem mehr bereit.
Ausblick
Im Rahmen dieser Blog-Serie werden wir auf konkrete Spring Data Projekte wie Spring Data JPA und Spring Data MongoDB in Hinblick auf Konfiguration, Verwendung des APIs sowie Spezifika der Subprojekte eingehen.
Persist you must, Master Yoda says.
Weitere Beiträge
von Tobias Trelle
Dein Job bei codecentric?
Jobs
Agile Developer und Consultant (w/d/m)
Alle Standorte
Weitere Artikel in diesem Themenbereich
Entdecke spannende weiterführende Themen und lass dich von der codecentric Welt inspirieren.
Gemeinsam bessere Projekte umsetzen.
Wir helfen deinem Unternehmen.
Du stehst vor einer großen IT-Herausforderung? Wir sorgen für eine maßgeschneiderte Unterstützung. Informiere dich jetzt.
Hilf uns, noch besser zu werden.
Wir sind immer auf der Suche nach neuen Talenten. Auch für dich ist die passende Stelle dabei.
Blog-Autor*in
Tobias Trelle
Software Architect
Du hast noch Fragen zu diesem Thema? Dann sprich mich einfach an.
Du hast noch Fragen zu diesem Thema? Dann sprich mich einfach an.