[JAVA] 02. J'ai créé une API pour me connecter de Spring Boot à MySQL (My Batis)

Aperçu

Comme le titre l'indique, je vais essayer de me connecter à MySQL à partir d'une application Java créée avec Spring Boot. Utilisez MyBatis pour le mappeur O / R. * Qu'est-ce que mes Batis

Puisqu'il correspond à la suite de j'ai essayé de construire l'environnement Veuillez vous y référer également pour l'environnement prérequis.

Si vous ne pouvez pas vous connecter, n'hésitez pas à commenter.

Sujet principal

Entrons dans le sujet principal à partir d'ici. Cette fois, je vais simplement créer une API ** qui récupérera toutes les données de la base de données dans une liste lorsque vous enverrez une requête ** GET. Cliquez ici pour les noms de table et les données de test (https://qiita.com/supreme0110/items/896cfa0349be5eacfed5#4-1-db%E3%81%AB%E3%83%86%E3%83%BC%E3% On suppose que 83% 96% E3% 83% AB% E3% 82% 92% E4% BD% 9C% E3% 82% 8B) est inclus.

1. Préparez-vous à créer une API

1-1. Ajouter une dépendance

Les dépendances sont insuffisantes simplement en construisant l'environnement la dernière fois, ajoutons donc des dépendances. Nous utiliserons le pratique Spring Initializer. ** Ajoutez Web et Lombok ** à MySQL, MyBatis et cliquez sur ** Générer un projet **. * Qu'est-ce que Lombok イニシャライザ.png

Copiez le contenu de build.gradle du zip téléchargé vers build.gradle de votre projet. Juste au cas où, ** Rafraîchir **. 依存追加.png

J'ai pu capturer la dépendance en toute sécurité.

1-2. Configurer le plug-in IntelliJ

Ensuite, jouez avec le plug-in côté IntelliJ. Ouvrez les paramètres avec ** Ctrl + Alt + S ** et cliquez sur ** Parcourir les référentiels ... ** au bas de ** Plugins **. プラグイン設定.png

Si vous recherchez lombok, vous trouverez ** Plugin Lombok **, alors cliquez sur ** Installer ** pour l'installer. プラグイン設定2.png

Si vous pouvez l'installer, le mot ** Installer ** remplacera ** Redémarrer IntelliJ IDEA **, alors cliquez dessus pour redémarrer. C'est OK quand il est redémarré!

Vous êtes prêt à partir! Passons à la programmation!

2. Créez une API

Cette fois, rendons les choses incroyablement simples, avec une configuration ** contrôleur et mappeur uniquement **. (Bien qu'il existe des classes de données, etc.) Veuillez noter que nous n'expliquerons pas la source en profondeur.

2-1. Faire le tour du contrôleur

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

Une brève explication. (1). @ RequiredArgsConstructor génère automatiquement un constructeur qui attribue la valeur initiale au champ avec final. En d'autres termes, il s'agit de ** l'injection de constructeur **. (2) Appelez ʻUsersMapper` et recevez les données obtenues de la base de données sous forme de liste d'entités. (3). Le processus de remplissage de la liste reçue dans (2) dans la liste de la classe «SampleResponse» est en cours. (4) La valeur @ de Lombok génère automatiquement un constructeur et un getter qui initialise tous les champs. (5) Afin de simplifier la description du processus en (3), le processus de remplissage de l'entité vers la réponse est coupé.

Ensuite, créons des classes et des interfaces liées à la connexion DB.

2-2. Faire le tour du mappeur

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

Encore une brève explication. (1). Ajoutez @ Mapper qui est une annotation de MyBatis. Cela reconnaît que cette classe est un mappeur associé à XML. (2) Déclarez la méthode que vous souhaitez implémenter. ** Le nom de la méthode est mappé à l'attribut XML id décrit ci-dessous et le SQL correspondant est exécuté **. (3) Il s'agit de l'annotation «@ Data» fournie par Lombok. Cela générera automatiquement des setters et des getters pour tous les champs.

Essayez-le jusqu'à présent ** "Le nom de colonne de la table est-il un cas de serpent, mais le champ de l'entité peut-il être mappé dans le cas de chameau?" ** Je pensais que tu. Il y a quelques paramètres supplémentaires, veuillez donc procéder tel quel. Enfin, créez un fichier XML, mettez des paramètres simples dans application.yml, et vous avez terminé.

2-3. Création et paramétrage XML par 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:  #Ceci n'a pas d'importance cette fois car il définit uniquement les informations de connexion à la base de données
  datasource:
    url: jdbc:mysql://localhost/sample_db
    username: root
    password: dummy

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

La dernière brève explication. (1). Spécifiez le chemin de la classe à laquelle @ Mapper est donné dans l'attribut namespace. Cela vous permet de savoir à quelle interface Java ce fichier XML est mappé. (2) Pour mapper avec ʻUsersMapper.findUserList () mentionné ci-dessus, décrivez findUserList dans l'attribut ʻid. De plus, comme il est nécessaire de spécifier la valeur de retour, écrivez le chemin de la classe ʻUsersEntity dans l'attribut resultType. (3). Si vous voulez configurer l'interface Mapper et le fichier XML pour qu'il existe dans différents packages comme cette fois, vous pouvez spécifier mapperLocations` pour lire correctement XML. (4) C'est une fonction pratique qui mappe automatiquement le nom de la colonne du cas du serpent mentionné ci-dessus et le champ de l'entité écrit dans le cas du chameau **. La valeur par défaut est «false», alors définissons-la sur «true».

Il existe de nombreux autres éléments de réglage utiles. Veuillez vous référer à MyBatis Official.

Vous l'avez créé! !! Après cela, envoyons une requête à l'API et voyons si nous pouvons obtenir la valeur de la base de données! !!

3. Faites une demande réelle

Utilisez le client REST Postman (https://chrome.google.com/webstore/detail/tabbed-postman-rest-clien/coohjcphdfgbiolnekdpbcijmhambjff/related) pour envoyer votre demande. Bien sûr, vous pouvez utiliser curl ou d'autres outils.

Maintenant, commençons l'API. Sélectionnez la tâche Gradle ** bootRun ** depuis IntelliJ pour la lancer.

Spécifiez l'URL (http: // localhost: 8080 / get / sample), confirmez qu'il s'agit d'une méthode GET et cliquez sur ** Envoyer **. postman1.png

Vous pouvez confirmer que la valeur a été obtenue en toute sécurité! postman2.png

** Vous pouvez désormais utiliser la DB à tout moment! !! ** **

finalement

** J'ai l'impression que "Si vous avez un environnement, vous pouvez le créer facilement!" **.

** MyBatis aime personnellement le fait que SQL puisse être écrit et que le mappage avec java soit facile à comprendre **. Il semble que vous n'aimiez pas l'endroit où vous devez écrire du XML et l'endroit où il n'y a pas de fonction de génération automatique comme JPA. ..

Comme pour tout, je pense que c'est facile une fois qu'on s'y habitue!

Recommended Posts

02. J'ai créé une API pour me connecter de Spring Boot à MySQL (My Batis)
03. J'ai envoyé une demande de Spring Boot à l'API de recherche de code postal
Pour se connecter de Spring à MySQL sur un serveur virtuel (non résolu)
Mise à niveau de la botte à ressort de la série 1.5 à la série 2.0
Changer la demande / réponse de l'API REST Spring Boot de CamelCase à SankeCase
J'ai créé un formulaire de recherche simple avec Spring Boot + GitHub Search API.
Ce que j'ai fait lors de la migration de la série Spring Boot 1.4 vers la série 2.0
Ce que j'ai fait lors de la migration de la série Spring Boot 1.5 vers la série 2.0
L'histoire de la transition de Spring Boot 1.5 à 2.1
Connectez-vous de Java à MySQL à l'aide d'Eclipse
Modifications lors de la migration de Spring Boot 1.5 vers Spring Boot 2.0
Modifications lors de la migration de Spring Boot 2.0 vers Spring Boot 2.2
01. J'ai essayé de créer un environnement avec SpringBoot + IntelliJ + MySQL (MyBatis) (Windows 10)
Comment utiliser MyBatis2 (iBatis) avec Spring Boot 1.4 (Spring 4)
Connectez-vous à Aurora (MySQL) depuis une application Java
J'ai créé un client API pour Nature Remo
Introduction à Spring Boot + In-Memory Data Grid
Je voulais classer la botte à ressort dans un multi-projet
◆ Obtenez l'API créée par Spring Boot à partir de React
De la création d'un projet Spring Boot à l'exécution d'une application avec VS Code
Paramètres de connexion à MySQL avec Spring Boot + Spring JDBC
De la création d'un environnement cloud AWS au déploiement d'une application Spring Boot (pour les débutants)
Mappez automatiquement DTO aux entités avec l'API Spring Boot
[Java] Connectez-vous à MySQL
05. J'ai essayé de supprimer la source de Spring Boot
J'ai démarré MySQL 5.7 avec docker-compose et j'ai essayé de me connecter
J'ai essayé de réduire la capacité de Spring Boot
J'ai créé un domaine api avec Spring Framework. Partie 1
Présentez swagger-ui à l'API REST implémentée dans Spring Boot
Chargez un pot externe à partir du pot de graisse Spring Boot
J'ai créé une fonction pour enregistrer des images avec l'API dans Spring Framework. Partie 1 (édition API)
J'ai essayé de créer un serveur API avec Go (Echo) x MySQL x Docker x Clean Architecture
J'ai créé une fonction pour enregistrer des images avec l'API dans Spring Framework. Partie 2 (édition client)
L'histoire de la montée de Spring Boot de la série 1.5 à la série 2.1 part2
J'ai essayé de faire une demande en 3 mois d'inexpérimenté
Étapes requises pour émettre des événements asynchrones Spring Boot
Ce que j'ai corrigé lors de la mise à jour vers Spring Boot 1.5.12 ・ Ce à quoi j'étais accro
Je veux pousser une application créée avec Rails 6 vers GitHub
Comment appeler et utiliser l'API en Java (Spring Boot)
Connectez-vous à la base de données avec spring boot + spring jpa et effectuez l'opération CRUD
J'ai essayé de démarrer avec Swagger en utilisant Spring Boot
J'ai créé un système d'exemple MVC simple à l'aide de Spring Boot
Passé d'iBATIS à MyBatis3
Connectez-vous de Java à PostgreSQL
Introduction à Spring Boot ① ~ DI ~
Introduction à Spring Boot ② ~ AOP ~
Connectez-vous à MySQL 8 avec Java
[Spring Boot] Envoyer un e-mail
Introduction à Spring Boot, partie 1
[Android] Connectez-vous à MySQL (non terminé)
Depuis que je suis passé de Spring Boot (Java) à Ruby on Rails, j'ai résumé mes points préférés de Rails
Implémentez un serveur API Web REST simple avec Spring Boot + MySQL
Introduction à Spring Boot x Open API ~ Open API créée avec le modèle d'écart de génération ~
J'ai essayé d'implémenter un client OAuth avec Spring Boot / Security (connexion LINE)
J'ai essayé de me connecter à MySQL en utilisant le modèle JDBC avec Spring MVC
Je veux INSÉRER l'heure locale du printemps avec l'heure MySQL (également en millisecondes)
Je veux contrôler le message d'erreur par défaut de Spring Boot