[JAVA] Stellen Sie mit spring boot + spring jpa eine Verbindung zur Datenbank her und führen Sie die CRUD-Operation durch

Einführung

--Letztes Mal habe ich eine API erstellt, die nur eine Zeichenfolge in Erstellen eines Web-API-Servers mit Spring Boot zurückgibt.

Umgebung

Zu behandelnde Daten

Artikelname Schimmel Erläuterung
id int ID eindeutig für den Tweet
name String Der Name der Person, die getwittert hat
message String Tweet Inhalt

Bild von API zu erstellen

url HTTP-Methode Erläuterung
/tweet POST Speichern Sie den Tweet
/tweet GET Holen Sie sich alle Tweets
/tweet/{id} PUT Aktualisieren Sie Tweets mit der angegebenen ID
/tweet/{id} DELETE Löschen Sie den Tweet mit der angegebenen ID

Paketkonfiguration

src/main/java/com/example/api
.
├── ApiApplication.java
├── model
│   └── Tweet.java
├── repository
│   └── TweetRepository.java
├── service
│   └── TweetService.java
└── controller
    └── TweetController.java

--model: Stellt eine Entität dar (die zu verarbeitenden Daten) --repository: Zugriff auf DB --service: Geschäftslogik ausführen --controller: Prozessanforderung / Antwort vom Client verarbeiten

build.gradle-Einstellungen

build.gradle


	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation 'mysql:mysql-connector-java'

	compileOnly 'org.projectlombok:lombok:1.18.8'
	annotationProcessor 'org.projectlombok:lombok:1.18.8'

DB-Verbindungseinstellungen

--Erstellen Sie application.properties oder application.yml unter src / main / resources und geben Sie die Informationen der Datenbank ein, zu der eine Verbindung hergestellt werden soll.

application.yml


spring:
  datasource:
    sqlScriptEncoding: UTF-8
    driverClassName: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/testdb?useSSL=false&requireSSL=false
    username: root
    password: hoge
  #Vermeiden Sie es, die Datenbank beim Start der Anwendung zu initialisieren
  jpa:
    hibernate:
      ddl-auto: update
    #Behebung des Problems, dass beim Start des Frühlingsstarts keine Tabelle in der Datenbank erstellt werden kann
    properties:
      hibernate:
        dialect: org.hibernate.dialect.MySQL57Dialect
logging:
  level:
    sql: debug
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "create table tweet (tweet varchar(255) not null, primary key (tweet)) engine=MyISAM" via JDBC Statement
...(Weggelassen)...
Caused by: java.sql.SQLSyntaxErrorException: Specified key was too long; max key length is 1000 bytes
...(Weggelassen)...

Create / Read

Modell erstellen

--Erstellen Sie eine Klasse, die den Tweet selbst unter dem Paket model darstellt

Tweet.java


package com.example.api.model;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.*;

@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "tweet")
public class Tweet {
    @Id
    @GeneratedValue
    private int id;

    @Column(nullable = false)
    private String name;

    @Column(nullable = false)
    private String message;
}

-- @ Entity: Gibt an, dass es sich um eine JPA-Entität handelt (ein in der Datenbank gespeichertes Objekt). -- @Data / @NoArgsConstructor / @ AllArgsConstructor: Anmerkung von lombok. Getter, Setter, Konstruktor usw. automatisch erstellen. --@ Table (name = "tweet"): Geben Sie den Tabellennamen an, der der Entität entspricht -- @ Id: Anmerkung, die angibt, dass es sich um den Primärschlüssel der Entität handelt -- @ GeneratedValue: Damit nummeriert die DB automatisch. --@ Column (nullable = false): Eine Anmerkung zu einer DB-Spalte. Mit der Option nullable können Sie festlegen, ob null zugelassen werden soll

Repository erstellen

--Erstellen Sie eine Repository-Klasse unter dem Paket "Repository"

TweetRepository.java


package com.example.api.repository;

import com.example.api.model.Tweet;
import org.springframework.data.jpa.repository.JpaRepository;

public interface TweetRepository extends JpaRepository<Tweet, Integer> {}

Service erstellen

--Erstellen Sie eine Serviceklasse unter dem Paket "service"

TweetService.java


package com.example.api.service;

import com.example.api.model.Tweet;
import com.example.api.repository.TweetRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
@Transactional
public class TweetService {
    @Autowired
    TweetRepository tweetRepository;

    public Tweet postTweet(Tweet tweet) {
        return tweetRepository.save(tweet);
    }

    public List<Tweet> getTweet() {
        return tweetRepository.findAll();
    }
}

-- @ Service: spring Zeigt an, dass die Serviceklasse MVC ist. Ziel von DI (Dependency Injection) -- @ Transactional: Anmerkung zur Transaktionssteuerung -- @ Autowired: Anmerkung zum Injektionsziel des DI-Behälters

Controller erstellen

--Erstellen Sie eine Controller-Klasse unter dem Paket controller --Mit der Annotation @RequestMapping () wird die postTweet-Methode aufgerufen, wenn die POST-Methode für den Pfad tweet aufgerufen wird, und die getTweet-Methode wird aufgerufen, wenn die GET-Methode aufgerufen wird.

TweetController.java


package com.example.api.controller;

import com.example.api.model.Tweet;
import com.example.api.service.TweetService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("tweet")
public class TweetController {
    @Autowired
    TweetService tweetService;

    @RequestMapping(method = RequestMethod.POST)
    Tweet postTweet(@RequestBody Tweet tweet) {
        return tweetService.postTweet(tweet);
    }

    @RequestMapping(method = RequestMethod.GET)
    List<Tweet> getTweet() {
        return tweetService.getTweet();
    }
}

-- @ RestController: Anmerkung zur Controller-Klasse --@ RequestMapping (): Eine Anmerkung zum Akzeptieren von HTTP-Anforderungen. Geben Sie den Pfad zum Akzeptieren der Anforderung und die HTTP-Methode an -- @ RequestBody: Eine Anmerkung, die den Hauptteil einer Anforderung einem angegebenen Objekt zuordnet

Funktionsprüfung

# post request
$ curl -X POST -H 'Content-Type:application/json' -d '{"name":"Name", "message":"Botschaft"}' localhost:8080/tweet

# response
{"id":1,"name":"Name","message":"Botschaft"}

--Überprüfen Sie die Datenbank und es ist in Ordnung, wenn der angeforderte Inhalt gespeichert wird

mysql> select * from tweet;
+----+-----------------+--------+
| id | message         | name   |
+----+-----------------+--------+
|  1 |Botschaft|Name|
+----+-----------------+--------+
1 row in set (0.01 sec)
# get request
curl -X GET -H 'Content-Type:application/json' localhost:8080/tweet

# response
[{"id":1,"name":"Name","message":"Botschaft"}]

Update / Delete

Service reparieren

TweetService.java


    public Tweet updateTweet(Tweet tweet) {
        return tweetRepository.save(tweet);
    }

    public void deleteTweet(Integer id) {
        tweetRepository.deleteById(id);
    }

--update verwendet dieselbe save () Methode wie create --delete verwendet die Methode deleteById (), um die durch id angegebene Entität zu löschen

Controller reparieren

TweetController.java


    @RequestMapping(value = "{id}", method = RequestMethod.PUT)
    Tweet putTweet(@PathVariable("id") Integer id, @RequestBody Tweet tweet) {
        tweet.setId(id);
        return tweetService.updateTweet(tweet);
    }

    @RequestMapping(value = "{id}", method = RequestMethod.DELETE)
    void deleteTweet(@PathVariable("id") Integer id) {
        tweetService.deleteTweet(id);
    }

Funktionsprüfung

# put request
$ curl -X PUT -H 'Content-Type:application/json' -d '{"name":"Name aktualisiert", "message":"Aktualisierte Nachricht"}' localhost:8080/tweet/1

# response
{"id":1,"name":"Name aktualisiert","message":"Aktualisierte Nachricht"}

--Überprüfen Sie die Datenbank und stellen Sie sicher, dass die Daten aktualisiert werden

mysql> select * from tweet;
+----+-----------------------------+--------------------+
| id | message                     | name               |
+----+-----------------------------+--------------------+
|  1 |Aktualisierte Nachricht|Name aktualisiert|
+----+-----------------------------+--------------------+
1 row in set (0.01 sec)
# delete request
curl -X DELETE -H 'Content-Type:application/json' localhost:8080/tweet/1

#keine Antwort

--Überprüfen Sie die Datenbank und es ist in Ordnung, wenn die Daten gelöscht wurden!

mysql> select * from tweet;
Empty set (0.00 sec)

Referenz

Recommended Posts

Stellen Sie mit spring boot + spring jpa eine Verbindung zur Datenbank her und führen Sie die CRUD-Operation durch
Versuch, SSR Vue.js mit Spring Boot und GraalJS zu verwenden
Verbinden Sie Spring Boot und Angular typsicher mit OpenAPI Generator
Datenbankverknüpfung mit doma2 (Spring Boot)
Implementieren Sie die REST-API mit Spring Boot und JPA (Application Layer).
Implementieren Sie die REST-API mit Spring Boot und JPA (Infrastructure Layer).
Bis INSERT und SELECT für Postgres mit Spring Boot und Thymianblatt
Implementieren Sie die REST-API mit Spring Boot und JPA (Domain Layer Edition).
8 Dinge, die mit Spring Boot und JPA in die DB eingefügt werden müssen
HTTPS mit Spring Boot und Let's Encrypt
Implementieren Sie CRUD mit Spring Boot + Thymeleaf + MySQL
Fügen Sie Frühlingsstiefel und Gradle zur Sonnenfinsternis hinzu
Implementierungsmethode für Multi-Datenquelle mit Spring Boot (Mybatis und Spring Data JPA)
Verwendung von MyBatis2 (iBatis) mit Spring Boot 1.4 (Spring 4)
Verwendung des eingebauten h2db mit Federstiefel
Versuchen Sie, die Anmeldefunktion mit Spring Boot zu implementieren
Erstellen Sie eine CRUD-App mit Spring Boot 2 + Thymeleaf + MyBatis
Versuchen Sie, die Migration mit Spring Boot Flyway zu automatisieren
[Java] Artikel zum Hinzufügen einer Validierung mit Spring Boot 2.3.1.
Ich wollte Spring Boot in einem Multiprojekt gradle
[Einführung in Spring Boot] Authentifizierungsfunktion mit Spring Security
Mit Spring Boot herunterladen
Einstellungen für die Verbindung zu MySQL mit Spring Boot + Spring JDBC
Testen von JPA-Entitäten und -Repositorys mit Spring Boot @DataJpaTest
Versuchen Sie es mit einem DI-Container mit Laravel und Spring Boot
Wechseln Sie die Umgebung mit Spring Boot application.properties und @ Profile-Annotation
Ordnen Sie DTO automatisch Entitäten mit der Spring Boot-API zu
Versuchen Sie, OpenID Connect mit Keycloak (Spring Boot-Anwendung) zu verwenden.
Verwendungshinweis zu Spring Security: Zusammenarbeit mit Spring MVC und Boot
Ich habe MySQL 5.7 mit Docker-Compose gestartet und versucht, eine Verbindung herzustellen
Spring Boot mit Spring Security Filter-Einstellungen und Suchtpunkten
Ich habe versucht, mit Spring Data JPA zu beginnen
Booten nach Umgebung mit Spring Boot of Maven
Erstellen einer Datenbankumgebung mit Docker in Spring Boot (IntellJ)
Geben Sie das integrierte Tomcat-Zugriffsprotokoll mit Spring Boot an die Standardausgabe aus
Versuchen Sie Spring Boot von 0 bis 100.
Generieren Sie mit Spring Boot einen Barcode
Hallo Welt mit Spring Boot
Implementieren Sie GraphQL mit Spring Boot
Behandeln Sie die Java 8-Datums- und Uhrzeit-API mit Thymeleaf mit Spring Boot
Ich habe das Spring Boot-Einführungshandbuch [Zugriff auf Daten mit JPA] ausprobiert.
Beginnen Sie mit Spring Boot
Hallo Welt mit Spring Boot!
Schneiden Sie SQL in die Eigenschaftendatei mit jdbcTemplate von Spring Boot aus
Führen Sie LIFF mit Spring Boot aus
SNS-Login mit Spring Boot
Einführung in Spring Boot ~ ~ DI ~
Datei-Upload mit Spring Boot
Spring Boot beginnt mit dem Kopieren
Einführung in Spring Boot ② ~ AOP ~
Aufrufen und Verwenden der API in Java (Spring Boot)
Stellen Sie mit Java eine Verbindung zur Datenbank her
Stellen Sie mit Java eine Verbindung zu MySQL 8 her
Spring Boot beginnend mit Docker
Fluss bis zur Ausgabe von Tabellendaten, die mit Spring Boot angezeigt werden sollen
Hallo Welt mit Spring Boot
Setzen Sie Cookies mit Spring Boot
Verwenden Sie Spring JDBC mit Spring Boot
Hash beim Spring-Boot das Passwort und verwenden Sie die Mitgliederregistrierung und die Spring-Sicherheit, um die Anmeldefunktion zu implementieren.
Modul mit Spring Boot hinzufügen
Erste Schritte mit Spring Boot