Erweitern von Entitäten mit benutzerdefinierten Eigenschaften

JavaBeginner
Jetzt üben

Einführung

In diesem Projekt lernst du, wie du benutzerdefinierte Eigenschaften zu einer Entitätsklasse hinzufügen und einen benutzerdefinierten Typenhandler verwenden, um zwischen Boolean- und Integer-Werten in einer MyBatis-Anwendung zu konvertieren.

👀 Vorschau

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.lanqiao.test.MyBatisTest
Daten erfolgreich gelöscht
Daten erfolgreich hinzugefügt
[Kursnummer: 1       Kursname: Datenstrukturen    Dozent: Zoe Pflichtkurs: false, Kursnummer: 2      Kursname: JAVA       Dozent: William     Pflichtkurs: true, Kursnummer: 3  Kursname: Python     Dozent: Olivia      Pflichtkurs: true, Kursnummer: 4       Kursname: C++        Dozent: Brian  Pflichtkurs: false, Kursnummer: 6      Kursname: C  Dozent: Lisa        Pflichtkurs: true, Kursnummer: 8       Kursname: Künstliche Intelligenz       Dozent: Tom Pflichtkurs: true]
Daten erfolgreich aktualisiert
Tests ausgeführt: 4, Fehler: 0, Fehler: 0, Übersprungen: 0, Zeitverbrauch: 2,119 Sekunden
...
cNo     cName   teacher cProperties
1       Software Testing        Jack    1
2       JAVA    William 1
3       Python  Olivia  1
4       C++     Brian   0
6       C       Lisa    1
8       Künstliche Intelligenz Tom     1

🎯 Aufgaben

In diesem Projekt wirst du lernen:

  • Wie du einer Course-Entitätsklasse eine Eigenschaft hinzufügen, um die Kurs-Eigenschaft zu repräsentieren (Boolean cProperties, wobei true einen Pflichtkurs und false einen Wahlpflichtkurs darstellt)
  • Wie du einen benutzerdefinierten Typenhandler erstellen, um zwischen Boolean- und Integer-Werten zu konvertieren
  • Wie du den benutzerdefinierten Typenhandler in der MyBatis-Konfigurationsdatei registrieren
  • Wie du die Kurs-Tabelle und die CourseMapper aktualisieren, um das neue cProperties-Feld zu verwenden
  • Wie du den benutzerdefinierten Typenhandler verwenden, um die Kursinformationen in der Datenbank zu aktualisieren

🏆 Errungenschaften

Nach Abschluss dieses Projekts wirst du in der Lage sein:

  • Die BaseTypeHandler-Klasse zu erweitern, um einen benutzerdefinierten Typenhandler zu erstellen
  • Einen benutzerdefinierten Typenhandler in der MyBatis-Konfigurationsdatei zu registrieren
  • Das Datenbankschema und die entsprechende Mapper-Datei zu aktualisieren, um ein benutzerdefiniertes Feld zu verwenden
  • Den benutzerdefinierten Typenhandler verwenden, um Daten in der Datenbank zu aktualisieren

Füge Kurs-Eigenschaft zur Entitätsklasse hinzu

In diesem Schritt lernst du, wie du einer Entitätsklasse Course.java eine Eigenschaft hinzufügen, um die Kurs-Eigenschaft zu repräsentieren (Boolean cProperties, wobei true einen Pflichtkurs und false einen Wahlpflichtkurs darstellt).

  1. Öffne die Datei Course.java im Paket org.lanqiao.pojo.

  2. Füge ein privates Boolean-Feld cProperties zur Course-Klasse hinzu:

private Boolean cProperties;
  1. Generiere die getter- und setter-Methoden für das cProperties-Feld:
public Boolean getcProperties() {
    return cProperties;
}

public void setcProperties(Boolean cProperties) {
    this.cProperties = cProperties;
}
  1. Aktualisiere den Konstruktor, um den cProperties-Parameter zu enthalten:
public Course(int cNo, String cName, String teacher, Boolean cProperties) {
    this.cNo = cNo;
    this.cName = cName;
    this.teacher = teacher;
    this.cProperties = cProperties;
}
  1. Aktualisiere die toString()-Methode, um die cProperties-Informationen hinzuzufügen:
@Override
public String toString() {
    return "Kursnummer: " + this.cNo + "\tKursname: " + this.cName + "\tDozent: " + this.teacher + "\tPlichtkurs: " + (this.cProperties? "true" : "false");
}

Erstelle einen benutzerdefinierten Typenhandler

In diesem Schritt lernst du, wie du einen benutzerdefinierten Typenhandler erstellst, um zwischen Boolean- und Integer-Werten zu konvertieren.

  1. Erstelle eine neue Java-Klasse BooleanAndIntConverter im Paket org.lanqiao.converter.

  2. Erweitere die BaseTypeHandler<Boolean>-Klasse und implementiere die folgenden Methoden:

public class BooleanAndIntConverter extends BaseTypeHandler<Boolean> {

    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, Boolean aBoolean, JdbcType jdbcType) throws SQLException {
        preparedStatement.setInt(i, aBoolean? 1 : 0);
    }

    @Override
    public Boolean getNullableResult(ResultSet resultSet, String s) throws SQLException {
        int result = resultSet.getInt(s);
        return result == 1;
    }

    @Override
    public Boolean getNullableResult(ResultSet resultSet, int i) throws SQLException {
        int result = resultSet.getInt(i);
        return result == 1;
    }

    @Override
    public Boolean getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        int result = callableStatement.getInt(i);
        return result == 1;
    }
}

Die setNonNullParameter()-Methode konvertiert einen Boolean-Wert in einen Integer-Wert (1 für true, 0 für false), und die getNullableResult()-Methoden konvertieren einen Integer-Wert in einen Boolean-Wert (1 für true, 0 für false).

Registriere den benutzerdefinierten Typenhandler

In diesem Schritt lernst du, wie du den benutzerdefinierten Typenhandler in der MyBatis-Konfigurationsdatei mybatis-config.xml registrierst.

  1. Öffne die Datei mybatis-config.xml im Projektwurzelverzeichnis.

  2. Füge die folgende Konfiguration hinzu, um den benutzerdefinierten Typenhandler zu registrieren:

<typeHandlers>
    <typeHandler handler="org.lanqiao.converter.BooleanAndIntConverter"/>
</typeHandlers>

Diese Konfiguration veranlasst MyBatis, die BooleanAndIntConverter-Klasse zum Verarbeiten der Konvertierung zwischen Boolean- und Integer-Werten zu verwenden.

Aktualisiere die Kurs-Tabelle und den Mapper

In diesem Schritt lernst du, wie du die Kurs-Tabelle und die CourseMapper aktualisierst, um das neue cProperties-Feld zu verwenden.

  1. Öffne die Datei CourseMapper.xml und aktualisiere die SQL-Anweisungen, um das cProperties-Feld zu verwenden:
<insert id="insertCourse" parameterType="org.lanqiao.pojo.Course">
    insert into course(cNo,cName,teacher,cProperties)
    values(#{cNo},#{cName},#{teacher},#{cProperties})
</insert>

<update id="updateCourse" parameterType="org.lanqiao.pojo.Course">
    update course set cName=#{cName},teacher=#{teacher},cProperties=#{cProperties}
    where cNo=#{cNo}
</update>

Die insertCourse- und updateCourse-Anweisungen enthalten jetzt das cProperties-Feld.

Aktualisiere die Kursinformationen

In diesem Schritt lernst du, wie du den benutzerdefinierten Typenhandler verwendest, um die Kursinformationen zu aktualisieren.

  1. Öffne die Datei MyBatisTest.java.

  2. In der testUpd()-Methode aktualisiere die Kursinformationen für den Kurs mit der Kursnummer 1:

@Test
public void testUpd() throws IOException {
    CourseMapper cMapper = session.getMapper(CourseMapper.class);

    Course course = new Course(1, "Software Testing", "Jack", true);

    int i = cMapper.updateCourse(course);

    session.commit();

    System.out.println((i!= 0? "Daten erfolgreich aktualisiert" : "Fehler beim Aktualisieren der Daten"));

    session.close();
}

Das cProperties-Feld ist auf true gesetzt, was einen Pflichtkurs darstellt.

  1. In der testIns()-Methode füge einen neuen Kurs mit der Kursnummer 8 hinzu:
@Test
public void testIns() throws IOException {
    CourseMapper cMapper = session.getMapper(CourseMapper.class);

    Course course = new Course(8, "Künstliche Intelligenz", "Tom", true);

    int i = cMapper.insertCourse(course);

    session.commit();

    System.out.println((i!= 0? "Daten erfolgreich hinzugefügt" : "Fehler beim Hinzufügen der Daten"));

    session.close();
}

Das cProperties-Feld ist auf true gesetzt, was einen Pflichtkurs darstellt.

  1. In der testDEl()-Methode lösche den Kurs mit der Kursnummer 7:
@Test
public void testDEl() throws IOException {
    CourseMapper cMapper = session.getMapper(CourseMapper.class);

    int i = cMapper.deleteCourse(7);

    session.commit();

    System.out.println((i!= 0? "Daten erfolgreich gelöscht" : "Fehler beim Löschen der Daten"));

    session.close();
}

Nach Abschluss dieser Schritte hast du erfolgreich eine Kurs-Eigenschaft zur Entitätsklasse hinzugefügt, einen benutzerdefinierten Typenhandler erstellt, um zwischen Boolean- und Integer-Werten zu konvertieren, und den benutzerdefinierten Typenhandler verwendet, um die Kursinformationen in der Datenbank zu aktualisieren.

  1. Teste die Anwendung.
cd ~/project/MyBatisCourseDemo02/
mvn test
echo "USE MyBatisDemo; SELECT * FROM course;" | mysql -u root > course_data.txt
cat course_data.txt

Die Ausgabe sollte wie folgt aussehen:

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.lanqiao.test.MyBatisTest
Daten erfolgreich gelöscht
Daten erfolgreich hinzugefügt
[Kursnummer: 1       Kursname: Datenstrukturen    Dozent: Zoe Pflichtkurs: false, Kursnummer: 2      Kursname: JAVA       Dozent: William     Pflichtkurs: true, Kursnummer: 3  Kursname: Python     Dozent: Olivia      Pflichtkurs: true, Kursnummer: 4       Kursname: C++        Dozent: Brian  Pflichtkurs: false, Kursnummer: 6      Kursname: C  Dozent: Lisa        Pflichtkurs: true, Kursnummer: 8       Kursname: Künstliche Intelligenz       Dozent: Tom Pflichtkurs: true]
Daten erfolgreich aktualisiert
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.119 sec
...
cNo     cName   teacher cProperties
1       Software Testing        Jack    1
2       JAVA    William 1
3       Python  Olivia  1
4       C++     Brian   0
6       C       Lisa    1
8       Künstliche Intelligenz Tom     1

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✨ Lösung prüfen und üben