[JAVA] Zuordnung zu einer Klasse mit einem Wertobjekt in How to My Batis

Was du machen willst

Ich habe kürzlich objektorientiertes Design studiert. Bei der Verwendung von Domänenobjekten scheint das Vorhandensein geeigneter Klassen in der Datenbank problematisch zu sein. Ich hatte gehofft, den aus der Datenbank erhaltenen Wert direkt in Form eines Domänenobjekts zu erhalten: frowning2:

Ich lerne noch, also habe ich versucht, MyBatis als eine Lösung zu verwenden. Ich würde gerne wissen, ob es einen guten Weg gibt, den Wert aus der Datenbank zu erhalten: bow:

Umgebung

Versuchen Sie SELECT mit My Batis

Rufen Sie die MeetingRoom-Klasse mit MyBatis ab

public class MeetingRoom {
    private int id;
    private String name;

    ...
}
@Mapper
public interface MeetingRoomMapper {

    MeetingRoom findById(int roomId);
}
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.spring.tutorial.MeetingRoomMapper">
    <select id="findById" resultType="com.spring.tutorial.MeetingRoom">
        SELECT
            room_id as id,
            room_name as name
        FROM
            meeting_room
        WHERE
            room_id = #{room_id}
    </select>
</mapper>

Wenn Sie den Rückgabewert von findById der Mapper-Klasse und MeetingRoom als ResultType der Mapper-Datei angeben, wird dieser in Form von MeetingRoom zurückgegeben. Da der Spaltenname und der Eigenschaftsname übereinstimmen müssen, werden sie auch in der AS-Klausel angegeben.

Wertobjekt verwenden

Ändern Sie die MeetingRoom-ID vom Typ int in die ID-Klasse.

public class MeetingRoom {
    //Zum Wertobjekt wechseln
    private Id id;
    private String name;

    ...
}
public class Id {
    private static final int MIN = 1;
    private Integer value;

    Id(int value) {
        if (value < MIN) throw new IllegalArgumentException("Unzulässiger Wert. Wert:" + value);

        this.value = value;
    }
 
     ...
}

Verwenden Sie ResultMap, um die ID-Klasse und die MeetingRoom-Klasse festzulegen.

    <resultMap id="IdMap" type="com.spring.tutorial.Id" >
        <id property="value" column="room_id" />
    </resultMap>

    <resultMap id="MeetingRoomMap" type="com.spring.tutorial.MeetingRoom">
        <result property="name" column="room_name" />
        <association property="id" resultMap="IdMap"/>
    </resultMap>
    
    <select id="findById" resultMap="MeetingRoomMap">
        SELECT * FROM meeting_room WHERE room_id = #{room_id}
    </select>

Ändern Sie den ResultType von SELECT in ResultMap und geben Sie die ResultMap von MeetingRoom an. Verwenden Sie ** Zuordnung **, um ResultMap in ResultMap zu verwenden. Wenn die Eigenschaft desselben Objekts ein Ergebnis enthält, seien Sie vorsichtig, da ein Fehler auftritt, wenn Sie die folgende Zuordnung nicht beschreiben: point_up_2_tone1:

Der Inhalt des Elementtyps "resultMap" muss mit "(Konstruktor ?, ID *, Ergebnis *, Zuordnung *, Sammlung *, Diskriminator?)" Übereinstimmen.

Zusammenfassung

MyBatis ist gut, weil Sie die Anzahl der praktischen Klassen in der Datenbank nicht erhöhen müssen: entspannt:

Referenz

Grundsätze des Systemdesigns, die vor Ort nützlich sind mybatis - Mapper XML-Datei

Recommended Posts

Zuordnung zu einer Klasse mit einem Wertobjekt in How to My Batis
Punkte beim Zuordnen von Wertobjekten in MyBatis
So löschen Sie ein mit Rails erstelltes new_record-Objekt
[So fügen Sie ein Video mit Rails in haml ein]
Speichern von Objekten in PostgreSQL als JSON mit MyBatis (Mapper XML)
So übergeben Sie ein Objekt in MyBatis an Mapper, ohne ein Argument durchzugehen
So verschieben Sie eine andere Klasse mit einer Schaltflächenaktion einer anderen Klasse.
So richten Sie einen Proxy mit Authentifizierung in Feign ein
Verwendung derselben Mapper-Klasse in mehreren Datenquellen mit Spring Boot + MyBatis
So erstellen Sie eine JAR-Datei ohne Abhängigkeiten in Maven
So erhalten Sie den Wert von Boolean mit jQuery in einfacher Rails-Form
So benennen Sie ein Modell mit externen Schlüsseleinschränkungen in Rails um
Wie man über Klassengestaltung (Division) in einem Geschäftssystem nachdenkt (1)
So fügen Sie ein Video in Rails ein
So veröffentlichen Sie eine Bibliothek in jCenter
[Java] So suchen Sie mit der Methode includes nach Werten in einem Array (oder einer Liste)
[Persönliches Memo] Interaktion mit dem Zufallszahlengenerator in Java
So ändern Sie den Wert einer Variablen an einem Haltepunkt in IntelliJ
Android-Entwicklung, wie man den Wert des JSON-Objekts auf null überprüft
So starten Sie einen Docker-Container mit einem in einer Batchdatei bereitgestellten Volume
So erhalten Sie Keycloak-Anmeldeinformationen in der Interceptor-Klasse
Verwendung von MyBatis2 (iBatis) mit Spring Boot 1.4 (Spring 4)
So zeigen Sie eine Webseite in Java an
So erstellen Sie eine Klasse, die Klasseninformationen erbt
So erhalten Sie eine Klasse von Element in Java
So führen Sie eine djUnit-Aufgabe in Ant aus
So fügen Sie in Spring Boot einen Klassenpfad hinzu
So erstellen Sie ein Thema in Liferay 7 / DXP
So fügen Sie die html.erb-Klasse in Rails bedingt hinzu
So fügen Sie mit MyBatis alles auf einmal ein
So implementieren Sie eine ähnliche Funktion in Rails
So erstellen Sie einfach ein Pulldown mit Rails
So generieren Sie automatisch einen Konstruktor in Eclipse
So erhalten Sie die ID eines Benutzers, der sich in Swift bei Firebase authentifiziert hat
So überprüfen Sie, ob eine Instanzvariable in einer Ruby-Klasse definiert ist
So geben Sie ein Glas mit der von gradle in IntellijIDEA angegebenen Hauptklasse aus
So speichern Sie gleichzeitig Daten in einem Modell, das einem verschachtelten Formular zugeordnet ist (Rails 6.0.0)
So testen Sie eine Klasse, die application.properties mit SpringBoot verarbeitet (Anfrage: darauf hingewiesen)
Einbetten von JavaScript-Variablen in HTML mit Thymeleaf
So implementieren Sie UICollectionView mit Code nur in Swift
So löschen Sie alle Daten in einer bestimmten Tabelle
Aufrufen von Funktionen in großen Mengen mit Java Reflection
So erstellen Sie eine Java-Umgebung in nur 3 Sekunden
So implementieren Sie eine nette Funktion in Ajax mit Rails
So senden Sie einen Wert in HTML ohne Bildschirmübergang
So wechseln Sie Tomcat context.xml mit Eclipse WTP
Verwendung der Z3-Bibliothek in Scala mit Eclipse
So erstellen Sie ein Spring Boot-Projekt in IntelliJ
So generieren Sie manuell ein JWT mit Knock in Rails
So erstellen Sie einen Daten-URI (base64) in Java
[Ruby / Rails] Legen Sie einen eindeutigen (eindeutigen) Wert in der Klasse fest
So zeigen Sie eine Browser-Vorschau mit VS-Code an
So löschen Sie mit Docker Bilder ohne Tags in großen Mengen
So schreiben Sie eine Datumsvergleichssuche in Rails
So verspotten Sie einen Super-Methodenaufruf in PowerMock
Verwendung der JDD-Bibliothek in Scala mit Eclipse
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
So konvertieren Sie eine Datei in ein Byte-Array in Java