[JAVA] Ein Memorandum beim Versuch von Spring Data JPA mit STS

Überblick

Ich werde ein Memorandum aufbewahren, wenn ich Spring Data JPA mit STS ausprobiert habe. Hauptsächlich für mich. Spring Data JPA ist der O / R-Mapper von Spring. Modellschicht-Framework.

Erklärung der Wörter vor der Einführung

O / R-Mapper

Eine Datensatzzeile in einer DB-Tabelle oder -Ansicht Als eine Java-Instanz behandeln Tabellen und Instanzen Das Modul, dem zugeordnet werden soll. Ich werde später etwas detaillierter schreiben.

Modellschicht

Modell der MVC (Modell, Ansicht, Controller). DB selbst, CRUD zu DB (** C ** reate, ** R ** ead, ** U ** pdate, ** D ** elete), Der logische Teil der Anwendung.

Gründe, JPA im Frühjahr zu empfehlen

Was sind die Stärken von Spring Data JPA? Namenskonventionen für Klassen und Methoden usw. Wenn Sie Ihr Versprechen halten, erstellen Sie einfach eine Schnittstelle Sie können CRUD. Praktisch.

Wenn Sie jedoch SQL schreiben müssen JPQL statt SQL ** Enge Dialekte wie SQL gemischt mit Java ** Es scheint, dass es viele Muster zum Schreiben von SQL gibt.

Mit anderen Worten, es kann nur mit der Schnittstelle implementiert werden Eine einfache CRUD entspricht möglicherweise nicht Ihren Anforderungen. Es kann Fälle geben, in denen Sie es anpassen möchten. Aber ich möchte kein JPQL schreiben. Sie möchten in SQL schreiben, richtig? ** Ich kann schreiben. ** ** **

Für diejenigen wie mich in diesem Artikel Wir werden SQL direkt schreiben und implementieren. In diesem Artikel wird R (Lesen) von CRUD als Beispiel verwendet. Ich werde vorstellen, wie man es benutzt.

Einrichten von Spring Data JPA mit STS

Es ist eine gute Idee, also verwenden Sie STS Machen wir es mit dem Spring Boot-Projekt. Keine Validierung durch eine Webanwendung Ich möchte von JUnit überprüfen. Das Betriebssystem des Verifizierungs-PCs ist übrigens Windows 7.

Zunächst STS herunterladen. Laden Sie die Zip One herunter.

STS ist eine Eclipse-basierte IDE Um die Verwendung jedes Spring-Produkts zu vereinfachen Es ist angepasst.

Apropos STS = Spring Tool Suite Wie "Legen Sie alle Frühlingsbeläge" Es ist eine Nuance.

Entpacken Sie nach dem Herunterladen die Zip-Datei. Ich habe es auf c: \ sts erweitert. Es dauerte ungefähr 20 Minuten.

展開したzip

Gehen Sie zu C: \ sts \ sts-bundle \ sts- (Versionsnummer) .RELEASE, Starten Sie sts.exe. sts.exe

Beachten Sie hier. Es ist ein allgemeines Muster, Error: Failed to load the JNI shared library Beginnt nicht mit. Diese Fehlermeldung ist auf die Anwendungs- und Betriebssystembits zurückzuführen Tritt auf, wenn sie nicht übereinstimmen. Beispielsweise sind Windows und Java 64-Bit, STS 32-Bit. Zum Zeitpunkt des Schreibens dieses Artikels befindet sich auf der oberen Seite von STS eine 32-Bit-Zip. Es war eine Falle für mich.

Deshalb habe ich STS gestartet. 起動しました

Klicken Sie mit der rechten Maustaste auf Paket-Explorer. Erstellen Sie ein neues Projekt.

パッケージエクスプローラ上で右クリック

Der Typ ist Spring Boot> Spring Starter-Projekt. Spring Boot > Spring starter project

Spring Bootプロジェクト設定

Als nächstes folgt die Vorbereitung der DB. Ich habe es gewagt, Oracle zu verwenden. Der Grund ist die Kombination von Spring Boot + Oracle, Ich dachte, es würde später in der Praxis sein.

Und "wage" ist Datenbanktreiber in MySQL oder STS Während einige DBs enthalten sind Dies bedeutet, dass Oracle nicht enthalten ist.

Die Verbindungszieldatenbank lautet Oracle Database 11g Express Edition. Ich habe es mit Bezug auf [hier] gemacht (https://qiita.com/GohanOmori/items/0b58a656174c767e239e). Es ist praktisch, einen DB-Benutzer mit Administratorrechten über einen Browser zu erstellen.

Wie auch immer, aus dem Spring Boot-Projekt Ich kann keine Verbindung zur Oracle-Datenbank herstellen Laden Sie den Treiber von Oracle herunter (http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html). Maven Repository Ich konnte es nicht finden Ich habe die Bibliothek direkt zu meinem Projekt hinzugefügt. Es ist ein roter Kerl. Ursprünglich Maven oder Gradle Es wird empfohlen, das Projekt zu verwalten. Es war nicht da.

Ich fühle mich in der Praxis so.

Fügen Sie der erstellten Datenbank die folgenden Tabellen und Datensätze hinzu.

CREATE TABLE USER (
  USER_ID VARCHAR2(20), 
  USER_NAME VARCHAR2(20), 
  AGE NUMBER(3,0), 
  CONSTRAINT PK_USER PRIMARY KEY(USER_ID)
);

作成したテーブル、レコード

Hier ist eine kleine Ergänzung zum O / R-Mapper. Bereiten Sie für die obige Tabelle die folgende Klasse vor.

** UserInfo.java ** Klasse entsprechend der Tabelle USER_INFO

package jp.co.illmatics.app.samples.entity;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class UserInfo {

	@Id
	public String userId;

	public String userName;
	
	public Integer age;

	/**
	 *Konvertieren Sie den erfassten Datensatz in eine Zeichenfolge
	 */
	public String toString() {
		return "userId = " + userId + 
		       ", userName = " + userName + 
		       ", age = " + age;
	}

}

Tabellenname und Spaltenname Durch den Wechsel von Upper Snake Case zu Lower Camel Case Es ist mit dem Klassennamen und dem Feldnamen verknüpft.

in diesem Fall, Der Tabellenname USER_INFO ist der Klassenname UserInfo. Die Spalte USER_ID ist der Feldname userId, Und so weiter.

Hier ist übrigens das Projekt, das ich gemacht habe.

プロジェクト全体

Als nächstes werde ich jede Klasse vorstellen. Übrigens ist in diesem Artikel die Klasse "SpringApplication.run" Ich werde es nicht benutzen, also werde ich die Einführung weglassen.

** UserInfo Repository **

package jp.co.illmatics.app.samples.repository;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
import jp.co.illmatics.app.samples.entity.UserInfo;

public interface UserInfoRepository 
		extends JpaRepository<UserInfo, String> {
	public Optional<UserInfo> findByUserId(String userId);
}

Versprechen, JpaRepository zu erweitern, Geben Sie die Entitäts- und ID-Klassen in Generika an.

** Die Entität der Klasse, die auf die Datenbank zugreift. ** Schreiben Sie hier SQL.

package jp.co.illmatics.app.samples.repository.impl;

import java.util.List;
import java.util.Optional;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Component;

import jp.co.illmatics.app.samples.entity.UserInfo;
import jp.co.illmatics.app.samples.repository.UserInfoRepository;

@Component
public class UserInfoRepositoryImpl implements UserInfoRepository {

	@Autowired
	EntityManager manager;

	@SuppressWarnings("unchecked")
	@Override
	public Optional<UserInfo> findByUserId(String userId) {
		String sql = "select * from USER_INFO "
					+ "where USER_ID = :userId";
		Query query = manager.createNativeQuery(sql, UserInfo.class);
		query.setParameter("userId", userId);
		UserInfo rawResult = (UserInfo) query.getSingleResult();
		Optional<UserInfo> result = Optional.ofNullable(rawResult);
		return result;
	}
       // abbreviated
}

** JUnit-Testfall ** Es wurde bestätigt, dass dies funktioniert.

package jp.co.illmatics.app.samples.repository.impl;

import static org.junit.Assert.*;

import java.util.Optional;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import jp.co.illmatics.app.samples.entity.UserInfo;

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserInfoRepositoryImplTest {

	private String userId = "user001";
	
	@Autowired
	UserInfoRepositoryImpl userInfoRepositoryImpl;
	
	@Test
	public void testFindByUserId() {
		Optional<UserInfo> result = 
			userInfoRepositoryImpl.findByUserId(userId);
		assertTrue(result.isPresent());
		System.out.println(result.get().toString());
	}

}

Der Punkt ist die der Klasse angehängte Anmerkung.

@RunWith(SpringRunner.class)Sie können die Klasse mit Spring mit testen.


 Spring Runner steht für Spring JUnit 4 Class Runner.
 Danach können Sie DI für die Klassen im Projekt mit `` `@ SpringBootTest``` verwenden.

 ** application.properties ** Konfigurationsdatei

```properties
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:XE
spring.datasource.username=xxxxxx
spring.datasource.password=xxxxxx
spring.jpa.database-platform=org.hibernate.dialect.Oracle10gDialect
spring.jpa.show-sql=true

Das JUnit-Ausführungsprotokoll wird extrahiert.

Hibernate: select * from USER_INFO where USER_ID = ?
userId = user001, userName = userName001, age = 40

Schließlich

Vielen Dank für das Lesen bis zum Ende.

Recommended Posts

Ein Memorandum beim Versuch von Spring Data JPA mit STS
Erstellen eines gemeinsamen Repositorys mit Spring Data JPA
Ein Memorandum beim Erstellen eines REST-Service mit Spring Boot
ODER suchen Sie mit der Spring Data Jpa-Spezifikation
Sortieren nach Spring Data JPA (mit zusammengesetzter Schlüsselsortierung)
Ein Memorandum beim Versuch, eine GUI mit JavaFX zu erstellen
Ich habe versucht, mit Spring Data JPA zu beginnen
[spring] Verwenden wir Spring Data JPA
Ich habe das Spring Boot-Einführungshandbuch [Zugriff auf Daten mit JPA] ausprobiert.
Memorandum beim Spring Boot 1.5.10 → Spring Boot 2.0.0
Spring Data JPA: Schreiben Sie eine Abfrage in Pure SQL in @Query of Repository
Beim Testen der Formularauthentifizierung mit Spring Security tritt ein 404-Fehler auf
[So installieren Sie Spring Data Jpa]
Sehen Sie sich das Verhalten von Entitätsaktualisierungen mit Spring Boot + Spring Data JPA an
Spring Data JPA SQL-Protokollausgabe
Ein Memorandum mit NTP (Chrony) eingestellt
Das Erstellen einer REST-API mit Spring JPA-Daten mit REST und Lombok ist unglaublich einfach.
Ein Memorandum, in dem IME nicht mit VS Code aktiviert werden kann (Ubuntu 20.04)
Beachten Sie, dass ich Oracle 11g + Spring Boot mit Vagrant + Docker Compose ausprobiert habe
Implementierungsmethode für Multi-Datenquelle mit Spring Boot (Mybatis und Spring Data JPA)
Ein Memorandum beim Start einer Neuentwicklung mit IntelliJ + Gradle + SpringBoot + JUnit5 (Jupiter)
Feder mit Kotorin --2 RestController und Datenklasse
Erstellen Sie mit Spring Batch eine einfache On-Demand-Charge
Existiert mit der Spezifikation in Spring Data JPA
Javaw.exe Fehler beim Starten von Spring Boot (STS)
[Fehlerbehebung] Tritt auf, wenn versucht wird, mit Docker eine Umgebung für den Frühling zu erstellen
Jackson kann hibernateLazyInitializer in Spring Data nicht JSON serialisieren JPA führt zu einem Fehler
Erstellen Sie eine Website mit Spring Boot + Gradle (jdk1.8.x)
Erstellen Sie mit Spring Boot eine einfache Such-App
Spring Data JPA Save Select-Insert ist nur Insert
Gegenseitige Bezugnahme auf Entity of Spring Data JPA und seine Anmerkungen
Erstellen Sie einen Web-API-Server mit Spring Boot
Erstellen Sie ein WEB-System mit Spring + Doma + H2DB
Spring Boot + Spring Data JPA Informationen zu mehreren Tabellenverknüpfungen
Erstellen Sie mit Docker eine Spring Boot-Entwicklungsumgebung
Wovon ich süchtig war, als ich eine Spring Boot-Anwendung mit VS Code entwickelte
Beachten Sie, dass ich süchtig nach Stapelverarbeitung mit Spring Boot war
Eine Geschichte über die Erstellung von PKIX-Pfaden schlug fehl, als versucht wurde, mit Jenkins eine Tomcat-Bereitstellung durchzuführen
Beim Hochladen einer Datei mit Spring Boot wird eine Fehlerbehandlung durchgeführt, wenn die maximale Dateigröße überschritten wird.
Eine Warnung wird angezeigt, wenn versucht wird, eine große Ganzzahl mit den speziellen Variablen $ 1, $ 2, $ 3 ... zu verwenden.