Uso Prático de resultMap

JavaScriptBeginner
Pratique Agora

Introdução

Neste projeto, você aprenderá como usar o MyBatis para recuperar informações de cursos de um banco de dados e mapear os resultados para um objeto Java personalizado. Você também aprenderá como lidar com inconsistências entre a estrutura da tabela do banco de dados e as propriedades da classe de entidade.

👀 Pré-visualização

MyBatis course mapping preview
MyBatis resultMap example

🎯 Tarefas

Neste projeto, você aprenderá:

  • Como modificar as propriedades e métodos de uma classe de entidade para corresponder à estrutura da tabela do banco de dados.
  • Como configurar a interface do mapper para definir os métodos para consultar informações do curso.
  • Como configurar o arquivo XML do mapper para definir as consultas SQL e o mapeamento de resultados.
  • Como implementar casos de teste para verificar a funcionalidade do mapper.

🏆 Conquistas

Após concluir este projeto, você será capaz de:

  • Usar o MyBatis para interagir com um banco de dados e recuperar dados.
  • Usar resultMap para lidar com inconsistências entre a estrutura da tabela do banco de dados e as propriedades da classe de entidade.
  • Escrever casos de teste para verificar a funcionalidade de um mapper MyBatis.

Modificar a Classe de Entidade

Nesta etapa, você aprenderá como modificar as propriedades e os métodos da classe Course para corresponder à estrutura da tabela do banco de dados.

  1. Abra o arquivo Course.java localizado no diretório /org/lanqiao/pojo.
  2. Altere as propriedades cNo, cName e teacher para id, name e lecturer, respectivamente.
  3. Modifique os métodos getter e setter de acordo para corresponder aos novos nomes das propriedades.
  4. Salve as alterações no arquivo Course.java.
package org.lanqiao.pojo;

/**
 * Define a Course class
 * @author lanqiao
 */
public class Course {
    // Change course number to id
    private int id;
    // Change course name to name
    private String name;
    // Change lecturer to lecturer
    private String lecturer;

    public Course() {

    }

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

    // Modify getter and setter method names
    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;
    }
}
✨ Verificar Solução e Praticar

Configurar a Interface Mapper

Nesta etapa, você aprenderá como configurar a interface CourseMapper para definir os métodos para consultar informações do curso.

  1. Abra o arquivo CourseMapper.java localizado no diretório /org/lanqiao/mapper.
  2. Modifique a interface para incluir os seguintes métodos:
    • selectAllCourses(): Recupera todas as informações do curso.
    • selectCourseById(int id): Recupera as informações do curso com o ID do 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);
}
✨ Verificar Solução e Praticar

Configurar o Arquivo XML Mapper

Nesta etapa, você aprenderá como configurar o arquivo CourseMapper.xml para definir as consultas SQL e o mapeamento de resultados.

  1. Abra o arquivo CourseMapper.xml localizado no diretório raiz do projeto.
  2. Defina um resultMap para especificar o mapeamento entre as colunas da tabela do banco de dados e as propriedades da classe Course.
  3. Defina as consultas SQL para os métodos na 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">

    <!-- Definition of 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>

    <!-- Query all course information -->
    <select id="selectAllCourses" resultMap="courseResultMap">
        SELECT * FROM course;
    </select>

    <!-- Query course information with course number 2 -->
    <select id="selectCourseById" resultType="java.util.HashMap">
        SELECT * FROM course WHERE cNo = #{id};
    </select>

</mapper>
✨ Verificar Solução e Praticar

Implementar os Casos de Teste

Nesta etapa, você aprenderá como implementar os casos de teste para verificar a funcionalidade do CourseMapper.

  1. Abra o arquivo MyBatisTest.java localizado no diretório /org/lanqiao/test.
  2. Implemente o método testSelectAllCourses() para recuperar e exibir todas as informações do curso.
  3. Implemente o método testSelectCourseById() para recuperar as informações do curso com o número do curso 2 e armazenar o resultado em um 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";
        // Load the MyBatis configuration file
        Reader reader = Resources.getResourceAsReader(resource);
        // Create SqlSession factory
        sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        // Create SqlSession object capable of executing SQL statements in SQL mapping files
        session = sessionFactory.openSession();
    }

    @Test
    public void testSelectAllCourses() throws IOException{
        // Call the getMapper() method in session to return the interface object
        CourseMapper cMapper = session.getMapper(CourseMapper.class);
        // Perform query and return all Course objects
        List<Course> courses = cMapper.selectAllCourses();
        System.out.println(courses);
        session.close();
    }

    @Test
    public void testSelectCourseById() {
        // Obtain an instance of CourseMapper
        CourseMapper mapper = session.getMapper(CourseMapper.class);

        // Call the method to query the information of the course with course number 2
        Map<String, Object> course = mapper.selectCourseById(2);

        // Output the query result
        System.out.println(course);
    }
}

Ao seguir estas etapas, você modificou com sucesso a classe de entidade, configurou a interface do mapper e o arquivo XML, e implementou os casos de teste para recuperar informações do curso usando MyBatis.

Executar

Finalmente, você pode compilar e executar o código no terminal e verificar os arquivos de teste com Maven, usando os seguintes comandos:

cd MyBatisCourseDemo03
mvn test

Você pode consultar os seguintes efeitos de execução:

Test execution results display
Test case execution result
✨ Verificar Solução e Praticar

Resumo

Parabéns! Você concluiu este projeto. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.