Uso práctico de resultMap

JavaScriptJavaScriptBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este proyecto, aprenderás a usar MyBatis para recuperar información de cursos desde una base de datos y mapear los resultados a un objeto Java personalizado. También aprenderás a manejar las inconsistencias entre la estructura de la tabla de la base de datos y las propiedades de la clase de entidad.

👀 Vista previa

Vista previa del mapeo del curso de MyBatis
Ejemplo de resultMap de MyBatis

🎯 Tareas

En este proyecto, aprenderás:

  • Cómo modificar las propiedades y métodos de una clase de entidad para que coincidan con la estructura de la tabla de la base de datos.
  • Cómo configurar la interfaz del mapper para definir los métodos de consulta de información de cursos.
  • Cómo configurar el archivo XML del mapper para definir las consultas SQL y el mapeo de resultados.
  • Cómo implementar casos de prueba para verificar la funcionalidad del mapper.

🏆 Logros

Después de completar este proyecto, podrás:

  • Usar MyBatis para interactuar con una base de datos y recuperar datos.
  • Usar resultMap para manejar las inconsistencias entre la estructura de la tabla de la base de datos y las propiedades de la clase de entidad.
  • Escribir casos de prueba para verificar la funcionalidad de un mapper de MyBatis.

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL javascript(("JavaScript")) -.-> javascript/BasicConceptsGroup(["Basic Concepts"]) javascript(("JavaScript")) -.-> javascript/AdvancedConceptsGroup(["Advanced Concepts"]) javascript(("JavaScript")) -.-> javascript/DOMManipulationGroup(["DOM Manipulation"]) javascript(("JavaScript")) -.-> javascript/NetworkingGroup(["Networking"]) 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{{"Uso práctico de resultMap"}} javascript/obj_manip -.-> lab-300390{{"Uso práctico de resultMap"}} javascript/oop -.-> lab-300390{{"Uso práctico de resultMap"}} javascript/dom_select -.-> lab-300390{{"Uso práctico de resultMap"}} javascript/dom_manip -.-> lab-300390{{"Uso práctico de resultMap"}} javascript/dom_traverse -.-> lab-300390{{"Uso práctico de resultMap"}} javascript/json -.-> lab-300390{{"Uso práctico de resultMap"}} javascript/api_interact -.-> lab-300390{{"Uso práctico de resultMap"}} end

Modificar la clase de entidad

En este paso, aprenderás a modificar las propiedades y métodos de la clase Course para que coincidan con la estructura de la tabla de la base de datos.

  1. Abra el archivo Course.java ubicado en el directorio /org/lanqiao/pojo.
  2. Cambie las propiedades cNo, cName y teacher a id, name y lecturer respectivamente.
  3. Modifique los métodos getter y setter en consecuencia para que coincidan con los nuevos nombres de propiedad.
  4. Guarde los cambios en el archivo Course.java.
package org.lanqiao.pojo;

/**
 * Define una clase Course
 * @author lanqiao
 */
public class Course {
    // Cambie el número de curso a id
    private int id;
    // Cambie el nombre del curso a name
    private String name;
    // Cambie el profesor a lecturer
    private String lecturer;

    public Course() {

    }

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

    // Modifique los nombres de los métodos getter y 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;
    }
}

Configurar la interfaz del mapper

En este paso, aprenderás a configurar la interfaz CourseMapper para definir los métodos de consulta de información de cursos.

  1. Abra el archivo CourseMapper.java ubicado en el directorio /org/lanqiao/mapper.
  2. Modifique la interfaz para incluir los siguientes métodos:
    • selectAllCourses(): Recupera toda la información de cursos.
    • selectCourseById(int id): Recupera la información del curso con el ID de curso especificado.
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);
}

Configurar el archivo XML del mapper

En este paso, aprenderás a configurar el archivo CourseMapper.xml para definir las consultas SQL y el mapeo de resultados.

  1. Abra el archivo CourseMapper.xml ubicado en el directorio raíz del proyecto.
  2. Defina un resultMap para especificar el mapeo entre las columnas de la tabla de la base de datos y las propiedades de la clase Course.
  3. Defina las consultas SQL para los métodos en la interfaz 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">

    <!-- Definición 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>

    <!-- Consulta de toda la información de cursos -->
    <select id="selectAllCourses" resultMap="courseResultMap">
        SELECT * FROM course;
    </select>

    <!-- Consulta de información de curso con número de curso 2 -->
    <select id="selectCourseById" resultType="java.util.HashMap">
        SELECT * FROM course WHERE cNo = #{id};
    </select>

</mapper>

Implementar los casos de prueba

En este paso, aprenderás a implementar los casos de prueba para verificar la funcionalidad de CourseMapper.

  1. Abra el archivo MyBatisTest.java ubicado en el directorio /org/lanqiao/test.
  2. Implemente el método testSelectAllCourses() para recuperar y mostrar toda la información de cursos.
  3. Implemente el método testSelectCourseById() para recuperar la información del curso con número de curso 2 y almacenar el resultado en un 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";
        // Cargar el archivo de configuración de MyBatis
        Reader reader = Resources.getResourceAsReader(resource);
        // Crear la fábrica de SqlSession
        sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        // Crear un objeto SqlSession capaz de ejecutar instrucciones SQL en archivos de mapeo SQL
        session = sessionFactory.openSession();
    }

    @Test
    public void testSelectAllCourses() throws IOException{
        // Llamar al método getMapper() en session para devolver el objeto de interfaz
        CourseMapper cMapper = session.getMapper(CourseMapper.class);
        // Realizar la consulta y devolver todos los objetos Course
        List<Course> courses = cMapper.selectAllCourses();
        System.out.println(courses);
        session.close();
    }

    @Test
    public void testSelectCourseById() {
        // Obtener una instancia de CourseMapper
        CourseMapper mapper = session.getMapper(CourseMapper.class);

        // Llamar al método para consultar la información del curso con número de curso 2
        Map<String, Object> course = mapper.selectCourseById(2);

        // Imprimir el resultado de la consulta
        System.out.println(course);
    }
}

Siguiendo estos pasos, has modificado con éxito la clase de entidad, configurado la interfaz y el archivo XML del mapper y ha implementado los casos de prueba para recuperar información de cursos usando MyBatis.

Ejecución

Finalmente, puedes compilar y ejecutar el código en la terminal y comprobar los archivos de prueba con Maven, usando los siguientes comandos:

cd MyBatisCourseDemo03
mvn test

Puedes consultar los siguientes efectos de ejecución:

Mostrar los resultados de la ejecución de la prueba
Resultado de la ejecución del caso de prueba
✨ Revisar Solución y Practicar

Resumen

¡Felicitaciones! Has completado este proyecto. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.