{"id":148,"date":"2024-01-09T21:26:49","date_gmt":"2024-01-09T20:26:49","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=148"},"modified":"2024-01-09T21:26:49","modified_gmt":"2024-01-09T20:26:49","slug":"jdbc-datenbankzugriffe-mit-spring-data","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=148","title":{"rendered":"JDBC-Datenbankzugriffe mit Spring Data"},"content":{"rendered":"\n<p>Spring Boot ist ein beliebtes Framework zur Entwicklung von Java-Webanwendungen, das die Entwicklung von robusten und skalierbaren Anwendungen vereinfacht. In Kombination mit Spring Data bietet es leistungsf\u00e4hige Funktionen zur Datenbankinteraktion, darunter auch die Arbeit mit JDBC-Datenbanken. In diesem Artikel werden wir uns damit befassen, wie man Entities in einer JDBC-Datenbank aus einer Spring Boot Webanwendung liest und schreibt. Als Beispiel werden wir eine PostgreSQL-Datenbank verwenden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Konfiguration der Datenbankverbindung<\/h2>\n\n\n\n<p>Zuerst m\u00fcssen wir die Verbindung zur PostgreSQL-Datenbank konfigurieren. In einer Spring Boot-Anwendung erfolgt dies normalerweise in der <code>application.properties<\/code> oder <code>application.yml<\/code>-Datei. Hier ist ein Beispiel f\u00fcr eine <code>application.properties<\/code>-Datei:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">spring.datasource.url=jdbc:postgresql:<span class=\"hljs-comment\">\/\/localhost:5432\/meine_datenbank<\/span>\nspring.datasource.username=benutzername\nspring.datasource.password=passwort\nspring.datasource.driverClassName=org.postgresql.Driver<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Stellen Sie sicher, dass Sie die URL, den Benutzernamen und das Passwort entsprechend Ihrer Datenbankkonfiguration anpassen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Erstellung einer Entity-Klasse<\/h2>\n\n\n\n<p>Als n\u00e4chstes erstellen wir eine Entity-Klasse, die unsere Datenbanktabelle repr\u00e4sentiert. In diesem Beispiel erstellen wir eine einfache Tabelle zur Speicherung von B\u00fcchern. Hier ist die Entity-Klasse:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> javax.persistence.Entity;\n<span class=\"hljs-keyword\">import<\/span> javax.persistence.GeneratedValue;\n<span class=\"hljs-keyword\">import<\/span> javax.persistence.GenerationType;\n<span class=\"hljs-keyword\">import<\/span> javax.persistence.Id;\n\n@Entity\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Buch<\/span> <\/span>{\n    @Id\n    @GeneratedValue(strategy = GenerationType.IDENTITY)\n    private Long id;\n    private <span class=\"hljs-built_in\">String<\/span> titel;\n    private <span class=\"hljs-built_in\">String<\/span> autor;\n\n    <span class=\"hljs-comment\">\/\/ Getter und Setter<\/span>\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Die Annotation <code>@Entity<\/code> kennzeichnet diese Klasse als JPA-Entity, was bedeutet, dass sie von Spring Data JPA erkannt und mit der Datenbanktabelle synchronisiert wird.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Erstellung eines Repository-Interfaces<\/h2>\n\n\n\n<p>Um auf die Datenbank zuzugreifen, erstellen wir ein Repository-Interface. Spring Data JPA generiert automatisch Implementierungen f\u00fcr die grundlegenden CRUD-Operationen (Create, Read, Update, Delete). Hier ist das Repository-Interface f\u00fcr unsere <code>Buch<\/code>-Entity:<\/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;\n\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">interface<\/span> <span class=\"hljs-title\">BuchRepository<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">JpaRepository<\/span>&lt;<span class=\"hljs-title\">Buch<\/span>, <span class=\"hljs-title\">Long<\/span>&gt; <\/span>{\n    <span class=\"hljs-comment\">\/\/ Hier k\u00f6nnen spezielle Abfragen definiert werden, falls ben\u00f6tigt<\/span>\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>Durch die Verwendung von <code>JpaRepository<\/code> m\u00fcssen wir keine benutzerdefinierten DAO-Klassen schreiben, um auf die Datenbank zuzugreifen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Lese- und Schreiboperationen<\/h2>\n\n\n\n<p>Jetzt k\u00f6nnen wir Lese- und Schreiboperationen auf unsere Datenbanktabelle durchf\u00fchren. Hier sind einige Beispiele:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Schreiben (Erstellen und Aktualisieren)<\/h3>\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\">@RestController\n@RequestMapping(<span class=\"hljs-string\">\"\/buecher\"<\/span>)\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">BuchController<\/span> <\/span>{\n    <span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">final<\/span> BuchRepository buchRepository;\n\n    @Autowired\n    <span class=\"hljs-keyword\">public<\/span> BuchController(BuchRepository buchRepository) {\n        this.buchRepository = buchRepository;\n    }\n\n    @PostMapping\n    <span class=\"hljs-keyword\">public<\/span> Buch createBuch(@RequestBody Buch buch) {\n        <span class=\"hljs-keyword\">return<\/span> buchRepository.save(buch);\n    }\n\n    @PutMapping(<span class=\"hljs-string\">\"\/{id}\"<\/span>)\n    <span class=\"hljs-keyword\">public<\/span> ResponseEntity&lt;Buch&gt; updateBuch(@PathVariable Long id, @RequestBody Buch buch) {\n        <span class=\"hljs-keyword\">if<\/span> (!buchRepository.existsById(id)) {\n            <span class=\"hljs-keyword\">return<\/span> ResponseEntity.notFound().build();\n        }\n\n        buch.setId(id);\n        Buch aktualisiertesBuch = buchRepository.save(buch);\n        <span class=\"hljs-keyword\">return<\/span> ResponseEntity.ok(aktualisiertesBuch);\n    }\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 haben wir einen <code>BuchController<\/code> erstellt, der POST- und PUT-Endpunkte f\u00fcr das Erstellen und Aktualisieren von B\u00fcchern bereitstellt. Die <code>@PostMapping<\/code>&#8211; und <code>@PutMapping<\/code>-Methoden verwenden das <code>BuchRepository<\/code>, um Daten in die Datenbank zu schreiben.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Lesen (Abfragen)<\/h3>\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\">@RestController\n@RequestMapping(<span class=\"hljs-string\">\"\/buecher\"<\/span>)\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">BuchController<\/span> <\/span>{\n    <span class=\"hljs-comment\">\/\/ ...<\/span>\n\n    @GetMapping(<span class=\"hljs-string\">\"\/{id}\"<\/span>)\n    <span class=\"hljs-keyword\">public<\/span> ResponseEntity&lt;Buch&gt; getBuch(@PathVariable Long id) {\n        Optional&lt;Buch&gt; buch = buchRepository.findById(id);\n        <span class=\"hljs-keyword\">return<\/span> buch.map(ResponseEntity::ok).orElse(ResponseEntity.notFound().build());\n    }\n\n    @GetMapping\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">List<\/span>&lt;Buch&gt; alleBuecher() {\n        <span class=\"hljs-keyword\">return<\/span> buchRepository.findAll();\n    }\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>Hier haben wir GET-Endpunkte hinzugef\u00fcgt, um B\u00fccher anhand ihrer ID abzurufen und alle B\u00fccher abzurufen. Wir verwenden <code>findById<\/code> und <code>findAll<\/code> von <code>BuchRepository<\/code>, um Daten aus der Datenbank abzurufen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Testen der Webanwendung<\/h2>\n\n\n\n<p>Um die Webanwendung zu testen, k\u00f6nnen Sie HTTP-Anfragen an die Endpunkte senden. Zum Beispiel:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>POST-Anfrage zum Erstellen eines neuen Buchs:<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">POST http:<span class=\"hljs-comment\">\/\/localhost:8080\/buecher<\/span>\nContent-Type: application\/json\n\n{\n    <span class=\"hljs-string\">\"titel\"<\/span>: <span class=\"hljs-string\">\"Der gro\u00dfe Gatsby\"<\/span>,\n    <span class=\"hljs-string\">\"autor\"<\/span>: <span class=\"hljs-string\">\"F. Scott Fitzgerald\"<\/span>\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>GET-Anfrage zum Abrufen aller B\u00fccher:<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">GET http:<span class=\"hljs-comment\">\/\/localhost:8080\/buecher<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>PUT-Anfrage zum Aktualisieren eines Buchs nach ID:<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">PUT http:<span class=\"hljs-comment\">\/\/localhost:8080\/buecher\/1<\/span>\nContent-Type: application\/json\n\n{\n    <span class=\"hljs-string\">\"titel\"<\/span>: <span class=\"hljs-string\">\"Der gro\u00dfe Gatsby (aktualisiert)\"<\/span>,\n    <span class=\"hljs-string\">\"autor\"<\/span>: <span class=\"hljs-string\">\"F. Scott Fitzgerald\"<\/span>\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>GET-Anfrage zum Abrufen eines Buchs nach ID:<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">GET http:<span class=\"hljs-comment\">\/\/localhost:8080\/buecher\/1<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n\n\n<p>Die Kombination von Spring Boot und Spring Data vereinfacht das Lesen und Schreiben von Entities in JDBC-Datenbanken erheblich. Mit minimaler Konfiguration k\u00f6nnen Sie CRUD-Operationen auf Ihrer Datenbank ausf\u00fchren, w\u00e4hrend Spring Data JPA die meisten Aufgaben automatisiert. In diesem Artikel haben wir PostgreSQL als Beispiel verwendet, aber die gleichen Prinzipien gelten auch f\u00fcr andere JDBC-Datenbanken. Mit diesem Wissen sind Sie gut ger\u00fcstet, um robuste und skalierbare Webanwendungen mit Spring Boot und Spring<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Spring Boot ist ein beliebtes Framework zur Entwicklung von Java-Webanwendungen, das die Entwicklung von robusten und skalierbaren Anwendungen vereinfacht. In Kombination mit Spring Data bietet es leistungsf\u00e4hige Funktionen zur Datenbankinteraktion, darunter auch die Arbeit mit JDBC-Datenbanken. In diesem Artikel werden wir uns damit befassen, wie man Entities in einer JDBC-Datenbank aus einer Spring Boot Webanwendung [&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-148","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\/148","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=148"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/148\/revisions"}],"predecessor-version":[{"id":149,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/148\/revisions\/149"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=148"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=148"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=148"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}