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.
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.
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.
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.
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.
Accédez à C: \ sts \ sts-bundle \ sts- (numéro de version) .RELEASE, Démarrez 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.
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à.
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
Merci d'avoir lu jusqu'au bout.
Recommended Posts