[JAVA] Implémenter l'API REST avec Spring Boot et JPA (couche d'infrastructure)

Implémentation d'un serveur API REST Web simple avec Spring Boot + MySQL --Qiita

Outline Implémentez la couche d'infrastructure selon la conception suivante. Considérez l'architecture de l'API Web implémentée par Spring Boot --Qiita

Créez les 3 classes suivantes.

├── infrastructure
│   ├── entity
│   │   └── UserEntity.java
│   └── repository
│       ├── UserJpaRepository.java
│       └── UserRepositoryImpl.java

UserEntity.java La classe à laquelle les enregistrements MySQL sont mappés. Définissez une méthode de conversion bidirectionnelle avec Domain Object (User.java).

UserEntity.java


package com.example.springapi.infrastructure.entity;

import com.example.springapi.domain.object.User;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

/**
 *Classe de mappage d'enregistrement RDB
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "test_users")
public class UserEntity {
    @Id
    @Column(name = "id")
    private String id;

    @Column(name = "value")
    private String value;

    /**
     *Créer une instance à partir d'un objet de domaine
     *
     * @objet de domaine utilisateur param
     * @return UserEntity
     */
    public static UserEntity build(User user) {
        return UserEntity.builder()
                .id(user.getId())
                .value(user.getValue())
                .build();
    }

    /**
     *Convertir en objet de domaine
     *
     * @objet de domaine de retour
     */
    public User toDomainUser() {
        return User.builder()
                .id(this.id)
                .value(this.value)
                .build();
    }
}

* Annotation JPA

@Entity Cela exprime l'entité JPA (classe mappée). @Table Spécifiez le nom de la table. @id Spécifie qu'il s'agit de la clé primaire. Dans le cas d'une clé composée, la méthode d'écriture change. @Column Spécifiez le nom de colonne de la table.

* Annotation Lombok

@NoArgsConstructor Créez automatiquement un constructeur sans arguments. Un constructeur sans argument est requis en raison du cycle de vie de l'entité JPA. Non requis si la configuration a un constructeur sans argument. (Lorsqu'il n'y a pas de champ final, etc. C'est absolument nécessaire si vous utilisez @Builder) @AllArgsConstructor Créez un constructeur qui prend tous les champs comme arguments. Si NoArgsConstructor est spécifié, @Builder ne fonctionnera que si cela est également spécifié (@Builder génère automatiquement un constructeur qui prend tous les champs comme arguments, mais ne crée pas de constructeur pour les classes avec xxxArgsConstructor. Et ça ne marche pas.)

UserJpaRepository.java Interface requise pour utiliser l'implémentation JPA. Héritez JpaRepository et spécifiez la classe Entity et le type de clé primaire. Lors de l'exécution, l'implémentation standard fournie par spring-data-jpa appelée SimpleJpaRepository est injectée par le conteneur DI, il n'est donc pas nécessaire d'écrire une classe d'implémentation.

UserJpaRepository.java


package com.example.springapi.infrastructure.repository;

import com.example.springapi.infrastructure.entity.UserEntity;
import org.springframework.data.jpa.repository.JpaRepository;

/**
 *Interface pour utiliser JPA
 */
public interface UserJpaRepository extends JpaRepository<UserEntity, String> {
}

UserRepositoryImpl.java Classe d'implémentation de l'interface UserRepository définie dans la couche de domaine. Le traitement proprement dit est effectué par SimpleJpaRepository.

UserRepositoryImpl.java


package com.example.springapi.infrastructure.repository;

import com.example.springapi.domain.object.User;
import com.example.springapi.domain.repository.UserRepository;
import com.example.springapi.infrastructure.entity.UserEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import java.util.Optional;

/**
 *Classe d'implémentation de persistance
 *Convertir un objet de domaine en entité et encapsuler JPA
 */
@Repository
@RequiredArgsConstructor
public class UserRepositoryImpl implements UserRepository {

    @NonNull
    private final UserJpaRepository userJpaRepository;

    /**
     * {@inheritDoc}
     */
    @Override
    public Optional<User> findById(String id) {
        return this.userJpaRepository.findById(id)
                .map(UserEntity::toDomainUser);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public User save(User user) {
        return this.userJpaRepository.save(UserEntity.build(user))
                .toDomainUser();
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void deleteById(String id) {
        this.userJpaRepository.deleteById(id);
    }
}

@Repository Un autre nom pour @Compornent. Avec @Service.

Recommended Posts

Implémenter l'API REST avec Spring Boot et JPA (couche d'infrastructure)
Implémenter l'API REST avec Spring Boot et JPA (Application Layer)
Implémenter l'API REST avec Spring Boot et JPA (Domain Layer Edition)
Implémentez une API Rest simple avec Spring Security avec Spring Boot 2.0
Implémenter l'API REST avec Spring Boot
Implémentez une API Rest simple avec Spring Security & JWT avec Spring Boot 2.0
Implémentez un serveur API Web REST simple avec Spring Boot + MySQL
Implémenter GraphQL avec Spring Boot
Hello World (API REST) avec Apache Camel + Spring Boot 2
[Spring Boot] Obtenez des informations utilisateur avec l'API Rest (débutant)
Personnalisez la réponse aux erreurs de l'API REST avec Spring Boot (Partie 2)
Personnalisez la réponse aux erreurs de l'API REST avec Spring Boot (Partie 1)
Spring avec Kotorin - 4 Conception d'API REST
Gérez l'API de date et d'heure Java 8 avec Thymeleaf avec Spring Boot
Connectez-vous à la base de données avec spring boot + spring jpa et effectuez l'opération CRUD
[Débutant] Essayez d'écrire l'API REST pour l'application Todo avec Spring Boot
Créer une API REST avec Spring JPA Data avec REST et Lombok incroyablement facile.
HTTPS avec Spring Boot et Let's Encrypt
Implémenter CRUD avec Spring Boot + Thymeleaf + MySQL
Implémenter la fonction de pagination avec Spring Boot + Thymeleaf
Méthode d'implémentation pour source multi-données avec Spring boot (Mybatis et Spring Data JPA)
Essayez d'implémenter la fonction de connexion avec Spring Boot
Créer un serveur API Web avec Spring Boot
Télécharger avec Spring Boot
Test des entités et référentiels JPA à l'aide de Spring Boot @DataJpaTest
Essayez d'utiliser un conteneur DI avec Laravel et Spring Boot
Changer d'environnement avec Spring Boot application.properties et l'annotation @Profile
Mappez automatiquement DTO aux entités avec l'API Spring Boot
Mémo d'utilisation de Spring Security: coopération avec Spring MVC et Boot
Spring Boot avec les paramètres du filtre de sécurité Spring et les points addictifs
Un mémorandum lors de la création d'un service REST avec Spring Boot
Présentez swagger-ui à l'API REST implémentée dans Spring Boot
Tentative de SSR Vue.js avec Spring Boot et GraalJS
Connectez Spring Boot et Angular en toute sécurité avec OpenAPI Generator
Hello World avec Spring Boot
Spring with Kotorin --- 8. Couche de référentiel
Démarrez avec Spring Boot
Bonjour tout le monde avec Spring Boot!
Exécutez LIFF avec Spring Boot
Connexion SNS avec Spring Boot
Téléchargement de fichiers avec Spring Boot
Spring Boot commençant par copie
Faisons une API simple avec EC2 + RDS + Spring boot ①
Jusqu'à INSERT et SELECT sur Postgres avec botte de printemps et feuille de thym
Comment appeler et utiliser l'API en Java (Spring Boot)
Ressort avec Kotorin ―― 7. Couche de service
Essayez d'utiliser l'API de recherche de code postal avec Spring Boot
Spring Boot à partir de Docker
Hello World avec Spring Boot
Définir des cookies avec Spring Boot
Test de l'API REST avec REST Assured
Utiliser Spring JDBC avec Spring Boot
Avec Spring Boot, hachez le mot de passe et utilisez l'enregistrement des membres et la sécurité Spring pour implémenter la fonction de connexion.
Ajouter un module avec Spring Boot
Premiers pas avec Spring Boot
Lier l'API avec Spring + Vue.js
Créer un micro service avec Spring Boot
Développement piloté par domaine avec Java et Spring Boot-Layer et division de modules
Envoyer du courrier avec Spring Boot
8 choses à insérer dans DB en utilisant Spring Boot et JPA
Découvrons comment recevoir avec Request Body avec l'API REST de Spring Boot