[JAVA] 02. Ich habe eine API erstellt, um eine Verbindung von Spring Boot zu MySQL (My Batis) herzustellen.

Überblick

Wie der Titel schon sagt, werde ich versuchen, über eine mit Spring Boot erstellte Java-Anwendung eine Verbindung zu MySQL herzustellen. Verwenden Sie MyBatis für den O / R-Mapper. * Was ist mein Batis

Da es der Fortsetzung von [Ich habe versucht, die Umgebung aufzubauen] entspricht (https://qiita.com/supreme0110/items/896cfa0349be5eacfed5) Bitte beachten Sie auch dies für die vorausgesetzte Umgebung.

Wenn Sie keine Verbindung herstellen können, können Sie dies gerne kommentieren.

Hauptthema

Kommen wir von hier aus zum Hauptthema. Dieses Mal werde ich einfach eine API ** erstellen, die alle Daten in der Datenbank in einer Liste abruft, wenn Sie eine ** GET-Anfrage senden. Klicken Sie hier, um Tabellennamen und Testdaten anzuzeigen (https://qiita.com/supreme0110/items/896cfa0349be5eacfed5#4-1-db%E3%81%AB%E3%83%86%E3%83%BC%E3% Es wird angenommen, dass 83% 96% E3% 83% AB% E3% 82% 92% E4% BD% 9C% E3% 82% 8B) enthalten sind.

1. Bereiten Sie die Erstellung einer API vor

1-1. Fügen Sie eine Abhängigkeit hinzu

Abhängigkeiten reichen nicht aus, wenn Sie die Umgebung beim letzten Mal erstellen. Fügen Sie also Abhängigkeiten hinzu. Wir werden den praktischen Spring Initializer verwenden. ** Fügen Sie Web und Lombok ** zu MySQL, MyBatis hinzu und klicken Sie auf ** Projekt generieren **. * Was ist Lombok イニシャライザ.png

Kopieren Sie den Inhalt von build.gradle aus der heruntergeladenen Zip-Datei in build.gradle Ihres Projekts. Nur für den Fall, ** aktualisieren **. 依存追加.png

Ich konnte die Abhängigkeit sicher erfassen.

1-2. Stellen Sie das IntelliJ-Plug-In ein

Spielen Sie als Nächstes mit dem Plug-In auf der IntelliJ-Seite. Öffnen Sie die Einstellungen mit ** Strg + Alt + S ** und klicken Sie unten in ** Plugins ** auf ** Repositorys durchsuchen ... **. プラグイン設定.png

Wenn Sie nach Lombok suchen, finden Sie das ** Lombok Plugin **. Klicken Sie also auf ** Installieren **, um es zu installieren. プラグイン設定2.png

Wenn Sie es installieren können, ersetzt das Wort ** Install ** ** ** IntelliJ IDEA neu starten **. Klicken Sie also zum Neustart darauf. Es ist in Ordnung, wenn es neu gestartet wird!

Du bist bereit zu gehen! Kommen wir zur Programmierung!

2. Erstellen Sie eine API

Lassen Sie es uns diesmal wahnsinnig einfach machen, mit einer ** Controller- und Mapper-Konfiguration **. (Obwohl es Datenklassen usw. gibt) Bitte beachten Sie, dass wir die Quelle nicht ausführlich erläutern werden.

2-1. Um den Controller herum machen

java:com.example.sampleapi.controller.SampleController.java


@RestController
@RequiredArgsConstructor
public class SampleController {
    private final UsersMapper usersMapper;  // (1)

    @GetMapping("/get/sample")
    public List<SampleResponse> getSample() {
        List<UsersEntity> usersEntityList = usersMapper.findUserList();  // (2)
        return usersEntityList.stream().map(SampleResponse::create).collect(Collectors.toList());  // (3)
    }
}

java:com.example.sampleapi.controller.resource.SampleResponse.java


@Value  // (4)
public class SampleResponse {
    private Integer userId;
    private String userName;

    public static SampleResponse create(UsersEntity entity) {  // (5)
        return new SampleResponse(
                entity.getUserId(),
                entity.getUserName()
        );
    }
}

Eine kurze Erklärung. (1). @ RequiredArgsConstructor generiert automatisch einen Konstruktor, der dem Feld mit final den Anfangswert zuweist. Mit anderen Worten, es ist ** Konstruktorinjektion **. (2) Rufen Sie "UsersMapper" auf und empfangen Sie die von der DB erhaltenen Daten als Liste von Entitäten. (3) Der Vorgang des Nachfüllens der in (2) empfangenen Liste in die Liste der Klasse "SampleResponse" wird ausgeführt. (4) Lomboks "@ Value" generiert automatisch einen Konstruktor und einen Getter, der alle Felder initialisiert. (5) Um die Prozessbeschreibung in (3) zu vereinfachen, wird der Prozess des Nachfüllens von der Entität zur Antwort unterbrochen.

Als Nächstes erstellen wir Klassen und Schnittstellen für die DB-Verbindung.

2-2. Machen Sie um Mapper herum

java:com.example.sampleapi.mapper.UsersMapper.java


@Mapper  // (1)
@Component
public interface UsersMapper {
    List<UsersEntity> findUserList(); // (2)
}

java:com.example.sampleapi.mapper.entity.UsersEntity.java


@Data  // (3)
public class UsersEntity {
    private Integer userId;
    private String userName;
}

Noch eine kurze Erklärung. (1) Fügen Sie "@ Mapper" hinzu, eine Anmerkung von MyBatis. Dies erkennt, dass diese Klasse ein Mapper ist, der mit XML verknüpft ist. (2) Deklarieren Sie die Methode, die Sie implementieren möchten. ** Der Methodenname wird dem unten beschriebenen XML-ID-Attribut zugeordnet und die entsprechende SQL ausgeführt **. (3) Dies ist die von Lombok bereitgestellte Annotation "@ Data". Dadurch werden automatisch Setter und Getter für alle Felder generiert.

Probieren Sie es so weit ** "Ist der Spaltenname der Tabelle ein Schlangenfall, aber kann das Feld der Entität im Kamelfall abgebildet werden?" ** Ich dachte du. Es gibt noch ein paar weitere Einstellungen, also fahren Sie bitte so fort, wie es ist. Erstellen Sie schließlich eine XML-Datei, fügen Sie einfache Einstellungen in application.yml ein, und fertig.

2-3. XML-Erstellung und Einstellung durch application.yml

xml:resources.mapper.Users.xml


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.sampleapi.mapper.UsersMapper">  <!-- (1) -->
    <select id="findUserList" resultType="com.example.sampleapi.mapper.entity.UsersEntity">  <!-- (2) -->
        SELECT
            USER_ID,
            USER_NAME
        FROM
            USERS
    </select>
</mapper>

yml:resources.application.yml


spring:  #Dies ist diesmal irrelevant, da nur die DB-Verbindungsinformationen definiert werden
  datasource:
    url: jdbc:mysql://localhost/sample_db
    username: root
    password: dummy

mybatis:
  mapperLocations: classpath*:/mapper/*.xml  # (3)
  configuration:
    mapUnderscoreToCamelCase: true  # (4)

Die letzte kurze Erklärung. (1) Geben Sie den Pfad der Klasse an, für die "@ Mapper" im Attribut "Namespace" angegeben ist. Dadurch erfahren Sie, welcher Java-Schnittstelle diese XML-Datei zugeordnet ist. (2) Um eine Zuordnung zu "UsersMapper.findUserList ()" vorzunehmen, beschreiben Sie "findUserList" im Attribut "id". Da der Rückgabewert angegeben werden muss, schreiben Sie den Pfad der Klasse "UsersEntity" in das Attribut "resultType". (3) Wenn Sie die Mapper-Schnittstelle und die XML-Datei so konfigurieren möchten, dass sie wie dieses Mal in verschiedenen Paketen vorhanden sind, können Sie "mapperLocations" angeben, um XML korrekt zu lesen. (4) Dies ist eine praktische Funktion, die automatisch den Spaltennamen des oben erwähnten Schlangenfalls und das Feld der im Kamelfall ** geschriebenen Entität abbildet. Der Standardwert ist "false". Setzen wir ihn also auf "true".

Es gibt viele andere nützliche Einstellungselemente. Weitere Informationen finden Sie unter MyBatis Official.

Du hast es geschaffen! !! Danach senden wir tatsächlich eine Anfrage an die API und prüfen, ob wir den Wert von der DB erhalten können! !!

3. Stellen Sie eine tatsächliche Anfrage

Verwenden Sie den Postman REST-Client (https://chrome.google.com/webstore/detail/tabbed-postman-rest-clien/coohjcphdfgbiolnekdpbcijmhambjff/related), um Ihre Anfrage zu senden. Natürlich können Sie Curl oder andere Werkzeuge verwenden.

Starten wir nun die API. Wählen Sie die Gradle-Aufgabe ** bootRun ** von IntelliJ aus, um sie zu starten.

Geben Sie die URL an (http: // localhost: 8080 / get / sample), bestätigen Sie, dass es sich um eine GET-Methode handelt, und klicken Sie auf ** Senden **. postman1.png

Sie können bestätigen, dass der Wert sicher erhalten wurde! postman2.png

** Jetzt können Sie die DB jederzeit bedienen! !! ** ** **

Schließlich

** Ich habe den Eindruck, dass "Wenn Sie eine Umgebung haben, können Sie es leicht machen!" **.

** MyBatis persönlich mag die Tatsache, dass SQL geschrieben werden kann und die Zuordnung mit Java leicht zu verstehen ist **. Es scheint, dass Sie den Ort, an dem Sie XML schreiben müssen, und den Ort, an dem es keine automatische Generierungsfunktion wie JPA gibt, nicht mögen. ..

Wie bei allem denke ich, dass es einfach ist, wenn man sich erst einmal daran gewöhnt hat!

Recommended Posts

02. Ich habe eine API erstellt, um eine Verbindung von Spring Boot zu MySQL (My Batis) herzustellen.
03. Ich habe eine Anfrage von Spring Boot an die Postleitzahlensuch-API gesendet
So stellen Sie auf einem virtuellen Server eine Verbindung von Spring zu MySQL her (ungelöst)
Rüsten Sie den Federstiefel von der 1.5-Serie auf die 2.0-Serie auf
Ändern Sie die Spring Boot REST API-Anforderung / Antwort von CamelCase in SankeCase
Ich habe ein einfaches Suchformular mit Spring Boot + GitHub Search API erstellt.
Was ich bei der Migration von der Spring Boot 1.4-Serie zur 2.0-Serie getan habe
Was ich bei der Migration von der Spring Boot 1.5-Serie zur 2.0-Serie getan habe
Die Geschichte des Übergangs von Spring Boot 1.5 zu 2.1
Stellen Sie mit Eclipse eine Verbindung von Java zu MySQL her
Änderungen bei der Migration von Spring Boot 1.5 auf Spring Boot 2.0
Änderungen bei der Migration von Spring Boot 2.0 zu Spring Boot 2.2
01. Ich habe versucht, eine Umgebung mit SpringBoot + IntelliJ + MySQL (MyBatis) (Windows 10) zu erstellen.
Verwendung von MyBatis2 (iBatis) mit Spring Boot 1.4 (Spring 4)
Stellen Sie über eine Java-Anwendung eine Verbindung zu Aurora (MySQL) her
Ich habe einen API-Client für Nature Remo erstellt
Einführung in Spring Boot + In-Memory Data Grid
Ich wollte Spring Boot in einem Multiprojekt gradle
◆ Rufen Sie die von Spring Boot erstellte API von React ab
Vom Erstellen eines Spring Boot-Projekts bis zum Ausführen einer Anwendung mit VS Code
Einstellungen für die Verbindung zu MySQL mit Spring Boot + Spring JDBC
Vom Aufbau einer AWS-Cloud-Umgebung bis zur Bereitstellung einer Spring Boot-App (für Anfänger)
Ordnen Sie DTO automatisch Entitäten mit der Spring Boot-API zu
[Java] Stellen Sie eine Verbindung zu MySQL her
05. Ich habe versucht, die Quelle von Spring Boot zu löschen
Ich habe MySQL 5.7 mit Docker-Compose gestartet und versucht, eine Verbindung herzustellen
Ich habe versucht, die Kapazität von Spring Boot zu reduzieren
Ich habe mit Spring Framework eine API-Domain erstellt. Teil 1
Führen Sie swagger-ui in die in Spring Boot implementierte REST-API ein
Laden Sie ein externes Glas aus dem Spring Boot-Fettglas
Ich habe eine Funktion zum Registrieren von Bildern bei der API in Spring Framework erstellt. Teil 1 (API Edition)
Ich habe versucht, einen API-Server mit Go (Echo) x MySQL x Docker x Clean Architecture zu erstellen
Ich habe eine Funktion zum Registrieren von Bildern bei der API in Spring Framework erstellt. Teil 2 (Client Edition)
Die Geschichte der Erhöhung von Spring Boot von 1.5 auf 2.1 Serie Teil2
Ich habe versucht, innerhalb von 3 Monaten einen Antrag von unerfahren zu stellen
Erforderliche Schritte zum Ausgeben von asynchronen Spring Boot-Ereignissen
Was ich beim Update auf Spring Boot 1.5.12 behoben habe ・ Wovon ich süchtig war
Ich möchte eine mit Rails 6 erstellte App an GitHub senden
Aufrufen und Verwenden der API in Java (Spring Boot)
Stellen Sie mit spring boot + spring jpa eine Verbindung zur Datenbank her und führen Sie die CRUD-Operation durch
Ich habe versucht, mit Swagger mit Spring Boot zu beginnen
Ich habe mit Spring Boot ein einfaches MVC-Beispielsystem erstellt
Von iBATIS zu MyBatis3 verschoben
Stellen Sie eine Verbindung von Java zu PostgreSQL her
Einführung in Spring Boot ~ ~ DI ~
Einführung in Spring Boot ② ~ AOP ~
Stellen Sie mit Java eine Verbindung zu MySQL 8 her
[Spring Boot] Senden Sie eine E-Mail
Einführung in Spring Boot Teil 1
[Android] Verbindung zu MySQL herstellen (unvollendet)
Seit ich von Spring Boot (Java) zu Ruby on Rails gewechselt bin, habe ich meine Lieblingspunkte von Rails zusammengefasst
Implementieren Sie einen einfachen Web-REST-API-Server mit Spring Boot + MySQL
Einführung in Spring Boot x Offene API ~ Offene API, erstellt mit Generationslückenmuster ~
Ich habe versucht, einen OAuth-Client mit Spring Boot / Security (LINE-Anmeldung) zu implementieren.
Ich habe versucht, mithilfe von JDBC Template mit Spring MVC eine Verbindung zu MySQL herzustellen
Ich möchte Spring Local Time mit MySQL Time (auch Millisekunden) einfügen.
Ich möchte die Standardfehlermeldung von Spring Boot steuern