{"id":150,"date":"2024-01-09T21:34:20","date_gmt":"2024-01-09T20:34:20","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=150"},"modified":"2024-01-09T21:34:21","modified_gmt":"2024-01-09T20:34:21","slug":"jparepositories-in-spring-data-fuer-fortgeschrittene","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=150","title":{"rendered":"JpaRepositories in Spring Data f\u00fcr Fortgeschrittene"},"content":{"rendered":"\n<p>Eine der Kernkomponenten von Spring Data ist das <code>JpaRepository<\/code>, das eine einfache M\u00f6glichkeit bietet, auf Datenbanktabellen zuzugreifen und CRUD (Create, Read, Update, Delete)-Operationen durchzuf\u00fchren. In diesem Artikel werden fortgeschrittene Features von <code>JpaRepositories<\/code> in Spring Data behandelt, darunter das Erstellen eigener Queries, Pagination und Sortierung.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Einf\u00fchrung in Spring Data JpaRepositories<\/h2>\n\n\n\n<p>Spring Data JpaRepositories bietet eine abstrakte Implementierung eines Repositories f\u00fcr Datenbankzugriff in JPA (Java Persistence API) basierten Anwendungen. Es erm\u00f6glicht Entwicklern, Datenbankabfragen und CRUD-Operationen mit minimalem Aufwand zu erstellen und bietet eine Vielzahl von Funktionen zur Vereinfachung des Datenzugriffs.<\/p>\n\n\n\n<p>Um ein <code>JpaRepository<\/code> zu erstellen, m\u00fcssen Sie eine Schnittstelle erstellen, die von <code>JpaRepository<\/code> erbt und den Typ der verwalteten Entit\u00e4t sowie ihren Prim\u00e4rschl\u00fcsseltyp angibt. Zum Beispiel:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">import org.springframework.data.jpa.repository.JpaRepository;\n\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">interface<\/span> <span class=\"hljs-title\">UserRepository<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">JpaRepository<\/span>&lt;<span class=\"hljs-title\">User<\/span>, <span class=\"hljs-title\">Long<\/span>&gt; <\/span>{\n    <span class=\"hljs-comment\">\/\/ Benutzerdefinierte Abfragen und Operationen k\u00f6nnen hier hinzugef\u00fcgt werden<\/span>\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel erstellen wir ein <code>JpaRepository<\/code> f\u00fcr die Entit\u00e4t <code>User<\/code> mit einem Prim\u00e4rschl\u00fcssel vom Typ <code>Long<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Verwendung der @Query-Annotation<\/h2>\n\n\n\n<p>Die einfachste M\u00f6glichkeit, benutzerdefinierte Datenbankabfragen in Spring Data JpaRepositories zu erstellen, ist die Verwendung der <code>@Query<\/code>-Annotation. Diese Annotation erm\u00f6glicht es Ihnen, JPQL (Java Persistence Query Language) oder SQL-Abfragen direkt in Ihrer Repository-Schnittstelle zu definieren.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Verwendung von JPQL<\/h3>\n\n\n\n<p>JPQL ist eine objektorientierte Abfragesprache, die speziell f\u00fcr die Verwendung mit JPA entwickelt wurde. Sie k\u00f6nnen die <code>@Query<\/code>-Annotation verwenden, um JPQL-Abfragen in Ihrem <code>JpaRepository<\/code> zu definieren. Hier ist ein einfaches Beispiel:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">import org.springframework.data.jpa.repository.JpaRepository;\nimport org.springframework.data.jpa.repository.Query;\nimport java.util.<span class=\"hljs-keyword\">List<\/span>;\n\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">interface<\/span> <span class=\"hljs-title\">UserRepository<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">JpaRepository<\/span>&lt;<span class=\"hljs-title\">User<\/span>, <span class=\"hljs-title\">Long<\/span>&gt; <\/span>{\n    @Query(<span class=\"hljs-string\">\"SELECT u FROM User u WHERE u.age &gt;= :minAge\"<\/span>)\n    <span class=\"hljs-keyword\">List<\/span>&lt;User&gt; findUsersByAgeGreaterThanEqual(@Param(<span class=\"hljs-string\">\"minAge\"<\/span>) int minAge);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel definieren wir eine benutzerdefinierte Abfrage <code>findUsersByAgeGreaterThanEqual<\/code>, die alle Benutzer zur\u00fcckgibt, deren Alter gr\u00f6\u00dfer oder gleich dem \u00fcbergebenen Wert ist.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Verwendung von SQL<\/h3>\n\n\n\n<p>Wenn Sie eine native SQL-Abfrage ausf\u00fchren m\u00f6chten, k\u00f6nnen Sie die <code>nativeQuery<\/code>-Option der <code>@Query<\/code>-Annotation verwenden. Hier ist ein Beispiel:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">import org.springframework.data.jpa.repository.JpaRepository;\nimport org.springframework.data.jpa.repository.Query;\nimport java.util.<span class=\"hljs-keyword\">List<\/span>;\n\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">interface<\/span> <span class=\"hljs-title\">UserRepository<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">JpaRepository<\/span>&lt;<span class=\"hljs-title\">User<\/span>, <span class=\"hljs-title\">Long<\/span>&gt; <\/span>{\n    @Query(value = <span class=\"hljs-string\">\"SELECT * FROM users WHERE age &gt;= :minAge\"<\/span>, nativeQuery = <span class=\"hljs-keyword\">true<\/span>)\n    <span class=\"hljs-keyword\">List<\/span>&lt;User&gt; findUsersByAgeGreaterThanEqual(@Param(<span class=\"hljs-string\">\"minAge\"<\/span>) int minAge);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel verwenden wir die <code>nativeQuery<\/code>-Option und geben die SQL-Abfrage direkt als Wert an.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Methodennamenkonventionen<\/h2>\n\n\n\n<p>Neben der Verwendung der <code>@Query<\/code>-Annotation bietet Spring Data JpaRepositories auch die M\u00f6glichkeit, benutzerdefinierte Abfragen basierend auf Methodennamenkonventionen zu erstellen. Dies kann die Codelesebarkeit verbessern und den Bedarf an JPQL- oder SQL-Abfragestrings reduzieren.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Einfache Abfragen<\/h3>\n\n\n\n<p>Spring Data JpaRepositories erlaubt es, einfache Abfragen zu erstellen, indem Sie Methodennamen entsprechend benennen. Zum Beispiel:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">import org.springframework.data.jpa.repository.JpaRepository;\nimport java.util.<span class=\"hljs-keyword\">List<\/span>;\n\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">interface<\/span> <span class=\"hljs-title\">UserRepository<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">JpaRepository<\/span>&lt;<span class=\"hljs-title\">User<\/span>, <span class=\"hljs-title\">Long<\/span>&gt; <\/span>{\n    <span class=\"hljs-keyword\">List<\/span>&lt;User&gt; findByLastName(String lastName);\n    <span class=\"hljs-keyword\">List<\/span>&lt;User&gt; findByAgeGreaterThanEqual(int age);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel werden die Methodennamen <code>findByLastName<\/code> und <code>findByAgeGreaterThanEqual<\/code> automatisch in Datenbankabfragen umgewandelt, die nach dem Nachnamen und dem Alter der Benutzer suchen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Komplexe Abfragen<\/h3>\n\n\n\n<p>Wenn Sie komplexere Abfragen ben\u00f6tigen, k\u00f6nnen Sie spezielle Schl\u00fcsselw\u00f6rter wie <code>And<\/code>, <code>Or<\/code>, <code>Not<\/code>, <code>Like<\/code>, <code>OrderBy<\/code>, usw. in Ihre Methodennamen integrieren. Hier ist ein Beispiel:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">import org.springframework.data.jpa.repository.JpaRepository;\nimport java.util.<span class=\"hljs-keyword\">List<\/span>;\n\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">interface<\/span> <span class=\"hljs-title\">UserRepository<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">JpaRepository<\/span>&lt;<span class=\"hljs-title\">User<\/span>, <span class=\"hljs-title\">Long<\/span>&gt; <\/span>{\n    <span class=\"hljs-keyword\">List<\/span>&lt;User&gt; findByAgeGreaterThanEqualAndLastNameLike(int age, String lastName);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel verwenden wir die Schl\u00fcsselw\u00f6rter <code>And<\/code> und <code>Like<\/code>, um eine Abfrage zu erstellen, die Benutzer mit einem Alter gr\u00f6\u00dfer oder gleich einem bestimmten Wert und einem Nachnamen, der einem Muster entspricht, zur\u00fcckgibt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Paging und Sortierung<\/h2>\n\n\n\n<p>Spring Data JpaRepositories bietet auch Unterst\u00fctzung f\u00fcr das Paging und die Sortierung von Abfrageergebnissen. Dies ist besonders n\u00fctzlich, wenn Sie gro\u00dfe Datenmengen verarbeiten m\u00fcssen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Paging<\/h3>\n\n\n\n<p>Um Paging in Ihrer Abfrage zu aktivieren, k\u00f6nnen Sie die <code>Pageable<\/code>-Schnittstelle als Parameter in Ihre Repository-Methoden aufnehmen. Hier ist ein Beispiel:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">import org.springframework.data.domain.Page;\nimport org.springframework.data.domain.Pageable;\nimport org.springframework.data.jpa.repository.JpaRepository;\n\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">interface<\/span> <span class=\"hljs-title\">UserRepository<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">JpaRepository<\/span>&lt;<span class=\"hljs-title\">User<\/span>, <span class=\"hljs-title\">Long<\/span>&gt; <\/span>{\n    Page&lt;User&gt; findByAgeGreaterThanEqual(int age, Pageable pageable);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel wird die Methode <code>findByAgeGreaterThanEqual<\/code> mit einem <code>Pageable<\/code>-Parameter definiert, um paginierte Ergebnisse zur\u00fcckzugeben.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Sortierung<\/h3>\n\n\n\n<p>Um die Sortierung Ihrer Abfrageergebnisse zu steuern, k\u00f6nnen Sie das <code>Sort<\/code>-Objekt verwenden. Hier ist ein Beispiel:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">import org.springframework.data.domain.Sort;\nimport org.springframework.data.jpa.repository.JpaRepository;\nimport java.util.<span class=\"hljs-keyword\">List<\/span>;\n\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">interface<\/span> <span class=\"hljs-title\">UserRepository<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">JpaRepository<\/span>&lt;<span class=\"hljs-title\">User<\/span>, <span class=\"hljs-title\">Long<\/span>&gt; <\/span>{\n    <span class=\"hljs-keyword\">List<\/span>&lt;User&gt; findByAgeGreaterThanEqual(int age, Sort sort);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel wird die Methode <code>findByAgeGreaterThanEqual<\/code> mit einem <code>Sort<\/code>-Parameter definiert, um die Ergebnisse nach einer oder mehreren Eigenschaften zu sortieren.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Zusammenfassung<\/h2>\n\n\n\n<p>Spring Data JpaRepositories ist ein leistungsstarkes Framework, das den Datenbankzugriff in Spring-basierten Anwendungen erheblich vereinfacht. In diesem Artikel haben wir fortgeschrittene Features von <code>JpaRepositories<\/code> behandelt, darunter die Verwendung der @Query-Annotation f\u00fcr benutzerdefinierte Abfragen und die Methodennamenkonventionen f\u00fcr einfache und komplexe Abfragen. Wir haben auch das Paging und die Sortierung von Abfrageergebnissen mit <code>Pageable <\/code>und <code>Sort <\/code>besprochen.<\/p>\n\n\n\n<p>Mit diesen fortgeschrittenen Features k\u00f6nnen Entwickler den Datenzugriff in Spring-Anwendungen optimieren und benutzerdefinierte Abfragen erstellen, die ihren Anforderungen entsprechen. Spring Data JpaRepositories bietet eine flexible und leistungsstarke M\u00f6glichkeit, Datenbankabfragen in Spring-Anwendungen zu verwalten und zu optimieren.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Eine der Kernkomponenten von Spring Data ist das JpaRepository, das eine einfache M\u00f6glichkeit bietet, auf Datenbanktabellen zuzugreifen und CRUD (Create, Read, Update, Delete)-Operationen durchzuf\u00fchren. In diesem Artikel werden fortgeschrittene Features von JpaRepositories in Spring Data behandelt, darunter das Erstellen eigener Queries, Pagination und Sortierung. Einf\u00fchrung in Spring Data JpaRepositories Spring Data JpaRepositories bietet eine abstrakte [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-150","post","type-post","status-publish","format-standard","hentry","category-spring"],"_links":{"self":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/150","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=150"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/150\/revisions"}],"predecessor-version":[{"id":151,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/150\/revisions\/151"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=150"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=150"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=150"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}