Практическое использование resultMap

JavaScriptJavaScriptBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом проекте вы научитесь использовать MyBatis для извлечения информации о курсах из базы данных и сопоставления результатов с пользовательским Java-объектом. Также вы узнаете, как обрабатывать несоответствия между структурой таблицы базы данных и свойствами класса сущности.

👀 Предварительный просмотр

Предварительный просмотр сопоставления курсов MyBatis
Пример resultMap MyBatis

🎯 Задачи

В этом проекте вы научитесь:

  • Как изменить свойства и методы класса сущности, чтобы соответствовать структуре таблицы базы данных.
  • Как настроить интерфейс маппера для определения методов запроса информации о курсах.
  • Как настроить XML-файл маппера для определения SQL-запросов и сопоставления результатов.
  • Как реализовать тестовые случаи для проверки функциональности маппера.

🏆 Достижения

После завершения этого проекта вы сможете:

  • Использовать MyBatis для взаимодействия с базой данных и извлечения данных.
  • Использовать resultMap для обработки несоответствий между структурой таблицы базы данных и свойствами класса сущности.
  • Писать тестовые случаи для проверки функциональности маппера MyBatis.

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL javascript(("JavaScript")) -.-> javascript/AdvancedConceptsGroup(["Advanced Concepts"]) javascript(("JavaScript")) -.-> javascript/DOMManipulationGroup(["DOM Manipulation"]) javascript(("JavaScript")) -.-> javascript/NetworkingGroup(["Networking"]) javascript(("JavaScript")) -.-> javascript/BasicConceptsGroup(["Basic Concepts"]) 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{{"Практическое использование resultMap"}} javascript/obj_manip -.-> lab-300390{{"Практическое использование resultMap"}} javascript/oop -.-> lab-300390{{"Практическое использование resultMap"}} javascript/dom_select -.-> lab-300390{{"Практическое использование resultMap"}} javascript/dom_manip -.-> lab-300390{{"Практическое использование resultMap"}} javascript/dom_traverse -.-> lab-300390{{"Практическое использование resultMap"}} javascript/json -.-> lab-300390{{"Практическое использование resultMap"}} javascript/api_interact -.-> lab-300390{{"Практическое использование resultMap"}} end

Изменить класс сущности

В этом шаге вы научитесь изменять свойства и методы класса Course, чтобы соответствовать структуре таблицы базы данных.

  1. Откройте файл Course.java, расположенный в директории /org/lanqiao/pojo.
  2. Измените свойства cNo, cName и teacher соответственно на id, name и lecturer.
  3. Соответственно измените методы-getтеры и методы-сеттеры, чтобы соответствовать новым именам свойств.
  4. Сохраните изменения в файле Course.java.
package org.lanqiao.pojo;

/**
 * Определить класс Course
 * @author lanqiao
 */
public class Course {
    // Изменить номер курса на id
    private int id;
    // Изменить название курса на name
    private String name;
    // Изменить преподавателя на lecturer
    private String lecturer;

    public Course() {

    }

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

    // Изменить имена методов-getтеров и методов-сеттеров
    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;
    }
}

Настроить интерфейс маппера

В этом шаге вы научитесь настраивать интерфейс CourseMapper для определения методов запроса информации о курсах.

  1. Откройте файл CourseMapper.java, расположенный в директории /org/lanqiao/mapper.
  2. Измените интерфейс, чтобы включить следующие методы:
    • selectAllCourses(): Извлекает всю информацию о курсах.
    • selectCourseById(int id): Извлекает информацию о курсе с указанным идентификатором курса.
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);
}

Настроить XML-файл маппера

В этом шаге вы научитесь настраивать файл CourseMapper.xml для определения SQL-запросов и сопоставления результатов.

  1. Откройте файл CourseMapper.xml, расположенный в корневой директории проекта.
  2. Определите resultMap, чтобы указать сопоставление между столбцами таблицы базы данных и свойствами класса Course.
  3. Определите SQL-запросы для методов в интерфейсе 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">

    <!-- Определение 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>

    <!-- Запрос всей информации о курсах -->
    <select id="selectAllCourses" resultMap="courseResultMap">
        SELECT * FROM course;
    </select>

    <!-- Запрос информации о курсе с номером курса 2 -->
    <select id="selectCourseById" resultType="java.util.HashMap">
        SELECT * FROM course WHERE cNo = #{id};
    </select>

</mapper>

Реализовать тестовые случаи

В этом шаге вы научитесь реализовывать тестовые случаи для проверки функциональности CourseMapper.

  1. Откройте файл MyBatisTest.java, расположенный в директории /org/lanqiao/test.
  2. Реализуйте метод testSelectAllCourses(), чтобы извлечь и отобразить всю информацию о курсах.
  3. Реализуйте метод testSelectCourseById(), чтобы извлечь информацию о курсе с номером курса 2 и сохранить результат в 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";
        // Загрузить файл конфигурации MyBatis
        Reader reader = Resources.getResourceAsReader(resource);
        // Создать SqlSession factory
        sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        // Создать объект SqlSession, способный выполнять SQL-операторы в SQL-отображении файлах
        session = sessionFactory.openSession();
    }

    @Test
    public void testSelectAllCourses() throws IOException{
        // Вызвать метод getMapper() в session, чтобы вернуть объект интерфейса
        CourseMapper cMapper = session.getMapper(CourseMapper.class);
        // Выполнить запрос и вернуть все объекты Course
        List<Course> courses = cMapper.selectAllCourses();
        System.out.println(courses);
        session.close();
    }

    @Test
    public void testSelectCourseById() {
        // Получить экземпляр CourseMapper
        CourseMapper mapper = session.getMapper(CourseMapper.class);

        // Вызвать метод для запроса информации о курсе с номером курса 2
        Map<String, Object> course = mapper.selectCourseById(2);

        // Вывести результат запроса
        System.out.println(course);
    }
}

Следуя этим шагам, вы успешно изменили класс сущности, настроили интерфейс маппера и XML-файл и реализовали тестовые случаи для извлечения информации о курсах с использованием MyBatis.

Запуск

Наконец, вы можете скомпилировать и запустить код в терминале и проверить тестовые файлы с использованием Maven, используя следующие команды:

cd MyBatisCourseDemo03
mvn test

Вы можете обратиться к следующим результатам выполнения:

Отображение результатов выполнения теста
Результат выполнения тестового случая
✨ Проверить решение и практиковаться

Резюме

Поздравляем! Вы завершили этот проект. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.