Utilisation pratique de resultMap

JavaScriptJavaScriptBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce projet, vous allez apprendre à utiliser MyBatis pour récupérer des informations sur les cours dans une base de données et à mapper les résultats à un objet Java personnalisé. Vous allez également apprendre à gérer les incohérences entre la structure de la table de base de données et les propriétés de la classe d'entité.

👀 Aperçu

Aperçu de la cartographie des cours MyBatis
Exemple de resultMap MyBatis

🎯 Tâches

Dans ce projet, vous allez apprendre :

  • Comment modifier les propriétés et les méthodes d'une classe d'entité pour correspondre à la structure de la table de base de données.
  • Comment configurer l'interface du mapper pour définir les méthodes de requête des informations sur les cours.
  • Comment configurer le fichier XML du mapper pour définir les requêtes SQL et la cartographie des résultats.
  • Comment implémenter des cas de test pour vérifier la fonctionnalité du mapper.

🏆 Réalisations

Après avoir terminé ce projet, vous serez capable de :

  • Utiliser MyBatis pour interagir avec une base de données et récupérer des données.
  • Utiliser resultMap pour gérer les incohérences entre la structure de la table de base de données et les propriétés de la classe d'entité.
  • Écrire des cas de test pour vérifier la fonctionnalité d'un mapper MyBatis.

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL javascript(("JavaScript")) -.-> javascript/NetworkingGroup(["Networking"]) javascript(("JavaScript")) -.-> javascript/BasicConceptsGroup(["Basic Concepts"]) javascript(("JavaScript")) -.-> javascript/AdvancedConceptsGroup(["Advanced Concepts"]) javascript(("JavaScript")) -.-> javascript/DOMManipulationGroup(["DOM Manipulation"]) javascript/BasicConceptsGroup -.-> javascript/functions("Functions") javascript/BasicConceptsGroup -.-> javascript/obj_manip("Object Manipulation") javascript/AdvancedConceptsGroup -.-> javascript/oop("Object-Oriented Programming") javascript/DOMManipulationGroup -.-> javascript/dom_select("DOM Selection") javascript/DOMManipulationGroup -.-> javascript/dom_manip("DOM Manipulation") javascript/DOMManipulationGroup -.-> javascript/dom_traverse("DOM Traversal") javascript/NetworkingGroup -.-> javascript/json("JSON") javascript/NetworkingGroup -.-> javascript/api_interact("API Interaction") subgraph Lab Skills javascript/functions -.-> lab-300390{{"Utilisation pratique de resultMap"}} javascript/obj_manip -.-> lab-300390{{"Utilisation pratique de resultMap"}} javascript/oop -.-> lab-300390{{"Utilisation pratique de resultMap"}} javascript/dom_select -.-> lab-300390{{"Utilisation pratique de resultMap"}} javascript/dom_manip -.-> lab-300390{{"Utilisation pratique de resultMap"}} javascript/dom_traverse -.-> lab-300390{{"Utilisation pratique de resultMap"}} javascript/json -.-> lab-300390{{"Utilisation pratique de resultMap"}} javascript/api_interact -.-> lab-300390{{"Utilisation pratique de resultMap"}} end

Modifier la classe d'entité

Dans cette étape, vous allez apprendre à modifier les propriétés et les méthodes de la classe Course pour qu'elles correspondent à la structure de la table de base de données.

  1. Ouvrez le fichier Course.java situé dans le répertoire /org/lanqiao/pojo.
  2. Changez les propriétés cNo, cName et teacher en id, name et lecturer respectivement.
  3. Modifiez les méthodes getter et setter en conséquence pour correspondre aux nouveaux noms de propriété.
  4. Enregistrez les modifications dans le fichier Course.java.
package org.lanqiao.pojo;

/**
 * Définir une classe Course
 * @author lanqiao
 */
public class Course {
    // Changer le numéro de cours en id
    private int id;
    // Changer le nom du cours en name
    private String name;
    // Changer l'enseignant en lecturer
    private String lecturer;

    public Course() {

    }

    public Course(int id, String name, String lecturer) {
        this.id = id;
        this.name = name;
        this.lecturer = lecturer;
    }

    // Modifier les noms des méthodes getter et setter
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getLecturer() {
        return lecturer;
    }

    public void setLecturer(String lecturer) {
        this.lecturer = lecturer;
    }

    @Override
    public String toString() {
        return "Course ID: " + this.id + "\tCourse Name: " + this.name + "\tLecturer: " + this.lecturer;
    }
}

Configurer l'interface du mapper

Dans cette étape, vous allez apprendre à configurer l'interface CourseMapper pour définir les méthodes de requête des informations sur les cours.

  1. Ouvrez le fichier CourseMapper.java situé dans le répertoire /org/lanqiao/mapper.
  2. Modifiez l'interface pour inclure les méthodes suivantes :
    • selectAllCourses() : Récupère toutes les informations sur les cours.
    • selectCourseById(int id) : Récupère les informations sur le cours avec l'ID de cours spécifié.
package org.lanqiao.mapper;

import java.util.List;
import java.util.Map;
import org.lanqiao.pojo.Course;

public interface CourseMapper {
    List<Course> selectAllCourses();
    Map<String, Object> selectCourseById(int id);
}

Configurer le fichier XML du mapper

Dans cette étape, vous allez apprendre à configurer le fichier CourseMapper.xml pour définir les requêtes SQL et la cartographie des résultats.

  1. Ouvrez le fichier CourseMapper.xml situé dans le répertoire racine du projet.
  2. Définissez un resultMap pour spécifier la correspondance entre les colonnes de la table de base de données et les propriétés de la classe Course.
  3. Définissez les requêtes SQL pour les méthodes de l'interface CourseMapper.
<?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="org.lanqiao.mapper.CourseMapper">

    <!-- Définition de resultMap -->
    <resultMap id="courseResultMap" type="org.lanqiao.pojo.Course">
        <id property="id" column="cNo"/>
        <result property="name" column="cName"/>
        <result property="lecturer" column="teacher"/>
    </resultMap>

    <!-- Requête pour toutes les informations sur les cours -->
    <select id="selectAllCourses" resultMap="courseResultMap">
        SELECT * FROM course;
    </select>

    <!-- Requête pour les informations sur le cours avec le numéro de cours 2 -->
    <select id="selectCourseById" resultType="java.util.HashMap">
        SELECT * FROM course WHERE cNo = #{id};
    </select>

</mapper>

Implémenter les cas de test

Dans cette étape, vous allez apprendre à implémenter les cas de test pour vérifier la fonctionnalité de CourseMapper.

  1. Ouvrez le fichier MyBatisTest.java situé dans le répertoire /org/lanqiao/test.
  2. Implémentez la méthode testSelectAllCourses() pour récupérer et afficher toutes les informations sur les cours.
  3. Implémentez la méthode testSelectCourseById() pour récupérer les informations sur le cours avec le numéro de cours 2 et stocker le résultat dans une HashMap.
package org.lanqiao.test;

import java.io.IOException;
import java.io.Reader;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import org.lanqiao.mapper.CourseMapper;
import org.lanqiao.pojo.Course;

public class MyBatisTest {

    SqlSessionFactory sessionFactory = null;
    SqlSession session = null;

    @Before
    public void before() throws IOException{
        String resource = "mybatis-config.xml";
        // Charger le fichier de configuration MyBatis
        Reader reader = Resources.getResourceAsReader(resource);
        // Créer la factory SqlSession
        sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        // Créer un objet SqlSession capable d'exécuter des instructions SQL dans les fichiers de mapping SQL
        session = sessionFactory.openSession();
    }

    @Test
    public void testSelectAllCourses() throws IOException{
        // Appeler la méthode getMapper() dans session pour retourner l'objet d'interface
        CourseMapper cMapper = session.getMapper(CourseMapper.class);
        // Effectuer la requête et retourner tous les objets Course
        List<Course> courses = cMapper.selectAllCourses();
        System.out.println(courses);
        session.close();
    }

    @Test
    public void testSelectCourseById() {
        // Obtenir une instance de CourseMapper
        CourseMapper mapper = session.getMapper(CourseMapper.class);

        // Appeler la méthode pour interroger les informations du cours avec le numéro de cours 2
        Map<String, Object> course = mapper.selectCourseById(2);

        // Afficher le résultat de la requête
        System.out.println(course);
    }
}

En suivant ces étapes, vous avez modifié avec succès la classe d'entité, configuré l'interface et le fichier XML du mapper, et implémenté les cas de test pour récupérer des informations sur les cours à l'aide de MyBatis.

Exécution

Enfin, vous pouvez compiler et exécuter le code dans le terminal et vérifier les fichiers de test avec Maven, en utilisant les commandes suivantes :

cd MyBatisCourseDemo03
mvn test

Vous pouvez vous référer aux effets de l'exécution suivants :

Affichage des résultats de l'exécution des tests
Résultat de l'exécution du cas de test
✨ Vérifier la solution et pratiquer

Sommaire

Félicitations ! Vous avez terminé ce projet. Vous pouvez pratiquer plus de laboratoires dans LabEx pour améliorer vos compétences.