GEDOPLAN
QuarkusJakarta EE (Java EE)

Hibernate ORM REST Data mit Panache

QuarkusJakarta EE (Java EE)
sneakers 2387874 1280

Der Alltag eines Entwicklers ist oftmals geprägt von sich immer wiederholenden Entwurfsmustern. Möchte man beispielsweise eine REST-Schnittstelle für persistente Datenobjekte entwickeln muss man zunächst die gewünschten Entitäten definieren. Anschließend sorgt man ggf. mit Repository-Klassen dafür, dass diese Objekte auch persistieren. Zu guter Letzt implementiert man noch die Ressourcen bzw. Endpunkte, die diese Daten nach außen bringen bzw. von dort annehmen können.

Es wäre doch schön, wenn man sich einige dieser Schritte sparen könnte und es einen automatisierten Weg gäbe, der mir diese Arbeiten abnimmt. Mit Hilfe von Quarkus und Panache ist genau das möglich. In diesem Blog Beitrag möchte ich euch das einmal anhand eines einfachen Beispiels zeigen.

Entitäten definieren

Was uns durch keinen Automatismus abgenommen werden kann ist natürlich die Definition unserer Entität. Diese können wir mit Hilfe von Jakarta Persistence (Hibernate) wie folgt definieren:

@Getter
@Setter
@Entity
public class Participant extends PanacheEntityBase {
  @Id
  private Long id;
  private String name;
  @Enumerated(EnumType.STRING)
  private Level level;
}

Wir benutzen an dieser Stelle Lombok um uns Getter- und Setter-Methoden sparen zu können. Darüber hinaus sollten die Methoden equals und hashcode natürlich JPA-konform definiert werden.

Repository anlegen

Panache bietet die Möglichkeit zwei Ansätze für den Zugriff auf die Entitäten einzusetzen. Zum Einen das Active Record Pattern und zum Anderen das Repository Pattern. Ich habe mich an dieser Stelle für Letzteres entschieden, womit es notwendig wird eine Repository Klasse zu definieren.

@ApplicationScoped
public class ParticipantRepository implements PanacheRepository<Participant> {
}

Panache liefert uns an dieser Stelle bereits die grundlegenden CRUD-Methoden mit. Diese könnten wir nun einsetzen um in einem Rest-Endpunkt die Zugriffe zu implementieren.

Endpunkt erzeugen

Damit Panache uns automatisiert unseren Endpunkt erzeugen kann, müssen wir lediglich ein entsprechendes Interface anlegen und mit unserer Repository-Klasse “verbinden”.

@ApplicationScoped
public interface ParticipantResource extends PanacheRepositoryResource<ParticipantRepository, Participant, Long> {
}

Anschließend stehen uns die üblichen Methoden zum Zugriff auf die Ressource zur verfügung. Eine Liste aller Einträge lässt sich bspw. über folgenden Aufruf abrufen.

 

$ curl http://localhost:8080/participant -H "Accept: application/json"

Darüber hinaus gibt es noch weitere nützliche Parameter, die man bei dem Aufruf mitgeben kann. Mit size kann man die Anzahl der gleichzeitig zurückgelieferten Elemente bestimmen. Auch eine Paginierung ist bereits vorhanden. Für weitere Informationen sei auf die Quarkus-Dokumentation verwiesen.

Neben der Nutzung von Hibernate bzw. Jakarta Persistence lässt sich ebenfalls eine MongoDB zur Speicherung der Daten nutzen.

Das Beispiel haben wir wie immer auf Github abgelegt.

Schreibe einen Kommentar

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

Bitte füllen Sie dieses Feld aus.
Bitte füllen Sie dieses Feld aus.
Bitte gib eine gültige E-Mail-Adresse ein.
Sie müssen den Bedingungen zustimmen, um fortzufahren.

Autor

Diesen Artikel teilen

LinkedIn
Xing

Gibt es noch Fragen?

Fragen beantworten wir sehr gerne! Schreibe uns einfach per Kontaktformular.

Kurse

weitere Blogbeiträge

Work Life Balance. Jobs bei Gedoplan

We are looking for you!

Lust bei GEDOPLAN mitzuarbeiten? Wir suchen immer Verstärkung – egal ob Entwickler, Dozent, Trainerberater oder für unser IT-Marketing! Schau doch einfach mal auf unsere Jobseiten! Wir freuen uns auf Dich!

Work Life Balance. Jobs bei Gedoplan

We are looking for you!

Lust bei GEDOPLAN mitzuarbeiten? Wir suchen immer Verstärkung – egal ob Entwickler, Dozent, Trainerberater oder für unser IT-Marketing! Schau doch einfach mal auf unsere Jobseiten! Wir freuen uns auf Dich!