Praktische Verwendung von resultMap

JavaScriptBeginner
Jetzt üben

Einführung

In diesem Projekt lernst du, wie du MyBatis verwendest, um Kursinformationen aus einer Datenbank abzurufen und die Ergebnisse auf ein benutzerdefiniertes Java-Objekt zuzuordnen. Du wirst auch lernen, wie Inkonsistenzen zwischen der Datenbanktabellenstruktur und den Entitätsklasse-Eigenschaften behandelt werden.

👀 Vorschau

Vorschau der MyBatis-Kurszuordnung

Beispiel für MyBatis resultMap

🎯 Aufgaben

In diesem Projekt wirst du lernen:

  • Wie du die Eigenschaften und Methoden einer Entitätsklasse modifizierst, um der Datenbanktabellenstruktur zu entsprechen.
  • Wie du die Mapper-Schnittstelle konfigurierst, um die Methoden zur Abfrage von Kursinformationen zu definieren.
  • Wie du die mapper-XML-Datei konfigurierst, um die SQL-Abfragen und die Ergebniszuordnung zu definieren.
  • Wie du Testfälle implementierst, um die Funktionalität des Mappers zu überprüfen.

🏆 Errungenschaften

Nach Abschluss dieses Projekts wirst du in der Lage sein:

  • MyBatis zum Interagieren mit einer Datenbank und zum Abrufen von Daten zu verwenden.
  • resultMap zum Behandeln von Inkonsistenzen zwischen der Datenbanktabellenstruktur und den Entitätsklasse-Eigenschaften zu verwenden.
  • Testfälle zu schreiben, um die Funktionalität eines MyBatis-Mappers zu überprüfen.

Ändern der Entitätsklasse

In diesem Schritt lernst du, wie du die Eigenschaften und Methoden der Course-Klasse modifizierst, um der Datenbanktabellenstruktur zu entsprechen.

  1. Öffne die Datei Course.java im Verzeichnis /org/lanqiao/pojo.
  2. Ändere die Eigenschaften cNo, cName und teacher in id, name und lecturer respectively.
  3. Modifiziere die Getter- und Setter-Methoden entsprechend, um den neuen Eigenschaftennamen zu entsprechen.
  4. Speichere die Änderungen in der Datei Course.java.
package org.lanqiao.pojo;

/**
 * Definiert eine Course-Klasse
 * @author lanqiao
 */
public class Course {
    // Ändere Kursnummer in id
    private int id;
    // Ändere Kursname in name
    private String name;
    // Ändere Dozent in lecturer
    private String lecturer;

    public Course() {

    }

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

    // Modifiziere Getter- und Setter-Methodennamen
    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;
    }
}

Konfigurieren der Mapper-Schnittstelle

In diesem Schritt lernst du, wie du die CourseMapper-Schnittstelle konfigurierst, um die Methoden zur Abfrage von Kursinformationen zu definieren.

  1. Öffne die Datei CourseMapper.java im Verzeichnis /org/lanqiao/mapper.
  2. Modifiziere die Schnittstelle, um die folgenden Methoden hinzuzufügen:
    • selectAllCourses(): Ruft alle Kursinformationen ab.
    • selectCourseById(int id): Ruft die Kursinformationen mit der angegebenen Kurs-ID ab.
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);
}

Konfigurieren der Mapper-XML-Datei

In diesem Schritt lernst du, wie du die CourseMapper.xml-Datei konfigurierst, um die SQL-Abfragen und die Ergebniszuordnung zu definieren.

  1. Öffne die Datei CourseMapper.xml im Stammverzeichnis des Projekts.
  2. Definiere ein resultMap, um die Zuordnung zwischen den Spalten der Datenbanktabelle und den Eigenschaften der Course-Klasse anzugeben.
  3. Definiere die SQL-Abfragen für die Methoden in der CourseMapper-Schnittstelle.
<?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 von 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>

    <!-- Abfrage aller Kursinformationen -->
    <select id="selectAllCourses" resultMap="courseResultMap">
        SELECT * FROM course;
    </select>

    <!-- Abfrage von Kursinformationen mit Kursnummer 2 -->
    <select id="selectCourseById" resultType="java.util.HashMap">
        SELECT * FROM course WHERE cNo = #{id};
    </select>

</mapper>

Implementieren der Testfälle

In diesem Schritt lernst du, wie du die Testfälle implementierst, um die Funktionalität der CourseMapper zu überprüfen.

  1. Öffne die Datei MyBatisTest.java im Verzeichnis /org/lanqiao/test.
  2. Implementiere die Methode testSelectAllCourses(), um alle Kursinformationen abzurufen und anzuzeigen.
  3. Implementiere die Methode testSelectCourseById(), um die Kursinformationen mit Kursnummer 2 abzurufen und das Ergebnis in eine HashMap zu speichern.
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";
        // Lade die MyBatis-Konfigurationsdatei
        Reader reader = Resources.getResourceAsReader(resource);
        // Erstelle die SqlSession-Factory
        sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        // Erstelle ein SqlSession-Objekt, das in der Lage ist, SQL-Anweisungen in SQL-Mapping-Dateien auszuführen
        session = sessionFactory.openSession();
    }

    @Test
    public void testSelectAllCourses() throws IOException{
        // Rufe die getMapper()-Methode in session auf, um das Schnittstellenobjekt zurückzugeben
        CourseMapper cMapper = session.getMapper(CourseMapper.class);
        // Führe die Abfrage aus und gebe alle Course-Objekte zurück
        List<Course> courses = cMapper.selectAllCourses();
        System.out.println(courses);
        session.close();
    }

    @Test
    public void testSelectCourseById() {
        // Hole eine Instanz von CourseMapper
        CourseMapper mapper = session.getMapper(CourseMapper.class);

        // Rufe die Methode auf, um die Informationen des Kurses mit Kursnummer 2 abzurufen
        Map<String, Object> course = mapper.selectCourseById(2);

        // Gebe das Abfrageergebnis aus
        System.out.println(course);
    }
}

Indem du diese Schritte folgst, hast du erfolgreich die Entitätsklasse geändert, die Mapper-Schnittstelle und die XML-Datei konfiguriert und die Testfälle implementiert, um Kursinformationen mit MyBatis abzurufen.

Ausführen

Schließlich kannst du den Code in der Konsole kompilieren und ausführen und die Testdateien mit Maven überprüfen, indem du die folgenden Befehle verwendest:

cd MyBatisCourseDemo03
mvn test

Du kannst auf die folgenden Ausführungsresultate verweisen:

Anzeige der Testausführungsresultate

Ergebnis der Testfallausführung

Zusammenfassung

Herzlichen Glückwunsch! Du hast dieses Projekt abgeschlossen. Du kannst in LabEx weitere Übungen absolvieren, um deine Fähigkeiten zu verbessern.

✨ Lösung prüfen und üben✨ Lösung prüfen und üben✨ Lösung prüfen und üben✨ Lösung prüfen und üben