[JAVA] Un mémorandum lors de l'essai de Spring Data JPA avec STS

Aperçu

Je garderai un mémorandum lorsque j'essaierai Spring Data JPA en utilisant STS. Principalement pour moi. Spring Data JPA est le mappeur O / R de Spring, Cadre de couche de modèle.

Explication des mots avant l'introduction

Cartographe O / R

Une ligne d'enregistrements dans une table ou vue DB Traiter comme une seule instance Java Tables et instances Le module à associer. J'écrirai un peu plus en détail plus tard.

Couche de modèle

Modèle de MVC (modèle, vue, contrôleur). DB lui-même, CRUD à DB (** C ** reate, ** R ** ead, ** U ** pdate, ** D ** elete), La partie logique de l'application.

Raisons de recommander JPA au printemps

Quelles sont les forces de Spring Data JPA? Conventions de dénomination des classes et des méthodes, etc. Si vous tenez votre promesse, créez simplement une interface Vous pouvez CRUD. Pratique.

Cependant, lorsque vous devez écrire du SQL JPQL au lieu de SQL ** Dialectes serrés comme SQL mélangés à Java ** Il semble qu'il existe de nombreux modèles d'écriture de SQL.

En d'autres termes, il ne peut être implémenté qu'avec l'interface Un simple CRUD peut ne pas répondre à vos exigences. Il se peut que vous souhaitiez le personnaliser dans certains cas. Mais je ne veux pas écrire JPQL. Vous voulez écrire en SQL, non? ** Je peux écrire. ** **

Pour ceux comme moi, dans cet article Nous allons écrire et implémenter SQL directement. Dans cet article, R (lecture) de CRUD est utilisé comme exemple. Je vais vous présenter comment l'utiliser.

Configuration de Spring Data JPA avec STS

C'est une bonne idée, alors utilisez STS Faisons-le avec le projet Spring Boot. Pas de validation depuis une application Web Je voudrais vérifier à partir de JUnit. À propos, le système d'exploitation du PC de vérification est Windows 7.

Tout d'abord, Téléchargez STS. Téléchargez le zip.

STS est un IDE basé sur une éclipse Pour faciliter l'utilisation de chaque produit Spring Il est personnalisé.

Au fait STS = Spring Tool Suite Comme "Mettez toutes les garnitures de printemps" C'est une nuance.

Après le téléchargement, décompressez le zip. Je l'ai étendu à c: \ sts. Cela a pris environ 20 minutes.

展開したzip

Accédez à C: \ sts \ sts-bundle \ sts- (numéro de version) .RELEASE, Démarrez sts.exe. sts.exe

Notez ici. C'est un schéma courant, Error: Failed to load the JNI shared library Ne commence pas par. Ce message d'erreur est dû à l'application et aux bits du système d'exploitation Se produit quand ils ne correspondent pas. Par exemple, Windows et Java sont 64 bits, mais STS est 32 bits. Au moment de la rédaction de cet article, il y a un zip 32 bits sur la page supérieure de STS. C'était un piège pour moi.

C'est pourquoi j'ai lancé STS. 起動しました

Faites un clic droit sur Package Explorer, Créez un nouveau projet.

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

Le type est Spring Boot> Spring starter project. Spring Boot > Spring starter project

Spring Bootプロジェクト設定

Vient ensuite la préparation de DB. J'ai osé utiliser Oracle. La raison en est la combinaison de Spring Boot + Oracle, Je pensais que ce serait en pratique plus tard.

Et "oser" est Pilote de base de données dans MySQL ou STS Alors que certains DB sont inclus Cela signifie qu'Oracle n'est pas inclus.

La base de données de destination de la connexion est Oracle Database 11g Express Edition Je l'ai fait en référence à ici. Il est pratique de créer un utilisateur DB avec des privilèges d'administrateur à partir d'un navigateur.

Cependant, en l'état, du projet Spring Boot Je ne parviens pas à me connecter à la base de données Oracle Téléchargez le pilote depuis Oracle (http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html). Maven Repository Je n'ai pas pu le trouver dans J'ai ajouté la bibliothèque directement à mon projet. C'est un gars rouge. À l'origine, Maven ou Gradle Il est recommandé de gérer le projet, Ce n'était pas là.

Je me sens comme ça dans la pratique.

Ajoutez les tables et enregistrements suivants au DB créé.

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

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

Voici un petit supplément sur le mappeur O / R. Pour le tableau ci-dessus, préparez le cours suivant.

** UserInfo.java ** Classe correspondant à la table 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;

	/**
	 *Convertir l'enregistrement acquis en une chaîne
	 */
	public String toString() {
		return "userId = " + userId + 
		       ", userName = " + userName + 
		       ", age = " + age;
	}

}

Nom de table et nom de colonne En passant de la caisse supérieure du serpent à la caisse inférieure du chameau Il est lié au nom de la classe et au nom du champ.

dans ce cas, Le nom de table USER_INFO est le nom de classe UserInfo, La colonne USER_ID est le nom de champ userId, Etc.

Au fait, voici le projet que j'ai réalisé.

プロジェクト全体

Ensuite, je présenterai chaque classe. À propos, dans cet article, la classe qui est `` SpringApplication.run '' est Je ne l'emploierai pas, j'omettrai donc l'introduction.

** Référentiel UserInfo **

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);
}

Promesse d'étendre JpaRepository, Spécifiez les classes d'entité et d'ID dans les génériques.

** L'entité de la classe qui accède au DB ** Écrivez SQL ici.

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
}

** Cas de test JUnit ** Cela a été confirmé pour fonctionner.

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());
	}

}

Le point est l'annotation attachée à la classe.

@RunWith(SpringRunner.class)Vous pouvez tester la classe à l'aide de Spring avec.


 Spring Runner signifie Spring JUnit 4 Class Runner.
 Après cela, vous pouvez utiliser DI pour les classes du projet avec `` `` @ SpringBootTest```.

 ** fichier de configuration application.properties **

```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

Le journal d'exécution de JUnit est extrait.

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

finalement

Merci d'avoir lu jusqu'au bout.

Recommended Posts

Un mémorandum lors de l'essai de Spring Data JPA avec STS
Création d'un référentiel commun avec Spring Data JPA
Un mémorandum lors de la création d'un service REST avec Spring Boot
OU rechercher avec la spécification Spring Data Jpa
Trier par Spring Data JPA (avec tri par clé composée)
Un mémorandum lors de la tentative de création d'une interface graphique à l'aide de JavaFX
J'ai essayé de démarrer avec Spring Data JPA
[spring] Utilisons Spring Data JPA
J'ai essayé le guide d'introduction de Spring Boot [Accès aux données avec JPA]
Mémorandum lorsque Spring Boot 1.5.10 → Spring Boot 2.0.0
Spring Data JPA: écrivez une requête en Pure SQL dans @Query of Repository
Une erreur 404 se produit lors du test de l'authentification par formulaire avec Spring Security
[Comment installer Spring Data Jpa]
Voir le comportement des mises à jour d'entités avec Spring Boot + Spring Data JPA
Sortie du journal Spring Data JPA SQL
Un mémorandum avec NTP (chrony) set
Créer une API REST avec Spring JPA Data avec REST et Lombok incroyablement facile.
Un mémorandum lorsque IME ne peut pas être activé avec VS Code (Ubuntu 20.04)
Une note sur l'essai d'Oracle 11g + Spring Boot avec Vagrant + Docker compose
Méthode d'implémentation pour source multi-données avec Spring boot (Mybatis et Spring Data JPA)
Un mémorandum lors du démarrage d'un nouveau développement avec IntelliJ + Gradle + SpringBoot + JUnit5 (Jupiter)
Spring avec Kotorin --2 RestController et Data Class
Créez un lot à la demande simple avec Spring Batch
Existe en utilisant la spécification dans Spring Data JPA
Erreur Javaw.exe lors du démarrage de Spring Boot (STS)
[Résolution d'erreur] Se produit lors de la tentative de création d'un environnement pour le printemps avec docker
Jackson ne peut pas sérialiser JSON hibernateLazyInitializer dans Spring Data JPA entraîne une erreur
Créez un site Web avec Spring Boot + Gradle (jdk1.8.x)
Créez une application de recherche simple avec Spring Boot
Spring Data JPA save select-insert n'est qu'une insertion
Référence mutuelle de l'entité de Spring Data JPA et ses notes
Créer un serveur API Web avec Spring Boot
Construisez un système WEB avec Spring + Doma + H2DB
Spring Boot + Spring Data JPA À propos des jointures de table multiples
Créer un environnement de développement Spring Boot avec docker
Ce à quoi j'étais accro lors du développement d'une application Spring Boot avec VS Code
Notez que j'étais accro au traitement par lots avec Spring Boot
Une histoire sur la création de chemin PKIX a échoué lors de la tentative de déploiement sur Tomcat avec Jenkins
Lors du téléchargement d'un fichier avec Spring Boot, la gestion des erreurs est effectuée lorsque la taille maximale du fichier est dépassée.
Un avertissement s'affiche lorsque vous essayez d'utiliser un entier énorme avec les variables spéciales $ 1, $ 2, $ 3 ...