Spring Data – Teil 1: Commons

2 Kommentare

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 …

public interface UserRepository extends PagingAndSortingRepository<User, String> {
}

… und verwenden es anschließend, um nach den zwei Attributen id und fullName aufsteigend bzw. absteigend zu suchen:

@Autowired UserRepository userRepo;
...
public Iterable<User> getSortedUsers() {
	return userRepo.findAll( new Sort(
		 new Sort.Order(Sort.Direction.ASC, "id"),
		 new Sort.Order(Sort.Direction.DESC, "fullName")
		 )
	);
}

Pagination

Auch das Blättern gestaltet sich sehr komfortabel:

Page<User> page = userRepo.findAll( new PageRequest(2, 20) );
List<User> users = page.getContent();	 
...

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.

Tobias Trelle

Diplom-Mathematiker Tobias Trelle ist Senior IT Consultant bei der codecentric AG, Solingen. Er ist seit knapp 20 Jahren im IT-Business unterwegs und interessiert sich für Software-Architekturen und skalierbare Lösungen. Tobias hält Vorträge auf Konferenzen und Usergruppen und ist Autor des Buchs „MongoDB: Ein praktischer Einstieg“.

Share on FacebookGoogle+Share on LinkedInTweet about this on TwitterShare on RedditDigg thisShare on StumbleUpon

Kommentare

  • Vishal

    22. April 2012 von Vishal

    hi,

    How can we add specifications in find All with use of named queries and Still get a Pageable object?
    I need to make use of pageable api from spring to retun my search result.

    Please advice.
    thanks
    Vishal

    • Tobias Trelle

      Hi Vishal,

      the PagingAndSortingRepository offers a method

      Page findAll(Pageable pageable);

      that supports paging for all records within a namespace (table, collection etc.). You don’t have to write your own query for that.

      HTH
      Tobias

Kommentieren

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.