Karte von java.util.Karte Feld mit MyBatis
Möchte ich die Daten zuordnen zu java.util.Map
Attribut mit MyBatis. Ich habe einfache POJOs wie diese:
public class Bar {
...fields
}
public class Foo {
private Map<String, Bar> bars;
public Foo() {
bars = new HashMap<String, Bar>();
}
...
}
Wie kann ich map-Daten bars mit MyBatis? Beispiel unten nicht funktioniert, weil es setzt immer wieder neue anzeigen ein.
<resultMap id="fooResultMap" type="Foo">
...attributes
<association property="bars" resultMap="barResultMap" />
</resultMap>
<resultMap id="barResultMap" type="map">
<result property="key" column="bar_key" />
<association property="value" javaType="Bar">
...attributes
</association>
</resultMap>
- Sollte die resultMap in fooResultMap den Verein verweisen zu barResultMap, anstatt priceMapResultMap? Ich verstehe nicht, was der Teil "Preis" spielt in Ihrer Frage. Sie wollen zu füllen Foo mit vielen Bars als Karte, sondern als eine Liste, richtig?
- Hallo danke das war Tippfehler, den ich korrigiert es. Sie Recht ich will zu füllen Foo mit vielen Bars als Karte, sondern als eine Liste, kann aber nicht, damit es richtig funktioniert.
- OK, also das nächste Fragen - 1) gibt es eine 1:N-Beziehung zwischen foos und bars in der Datenbank? (1 Foo kann viele Balken)? 2) In deinem SQL-Code für die Zuordnung sind Sie ziehen beide wieder in einer einzigen Abfrage? 3) Wenn Sie sagen, es funktioniert nicht, weil "es setzt immer wieder neue Karte auf Feld" meinst du es ist das überschreiben der "bars" - Karte, die Sie in erstellt der Konstruktor Foo - ist es anders, Rückkehr eine Karte oder was ist es derzeit zurück?
- 1) ja, es ist 1:N-Beziehung - Foo kann N (0..*) Bars. 2) Ja, ich wählen Sie alles in eine Abfrage. 3) so Wie ich das verstehe MyBatis, wenn ich <association Eigentum="Balken"... ich neue Map für jede Zeile, also ja, Es ist überschreiben Karte habe ich erstellt, im Konstruktor Foo. Und schließlich ja, es ist die Karte, aber mit nur einem Bar (immer die letzten). Ich glaube, ich brauche etwas ähnliches tag wie
<collection>
für Karten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe einige der Forschung getan auf dieser und fragte auf der MyBatis Google-Gruppe, da würde mich interessieren, wie Sie das selbst tun.
In der aktuellen Zeit, dies erscheint nicht möglich. Sie können es leicht zu arbeiten, wenn Sie möchten, eine
List<Bar>
im Foo-Objekt mit der<collection>
mapping.Versuchte ich mit
<collection>
für die Rückgabe einer Karte, aber es versteht nicht, was ich Frage, es zu tun.Ich weiß nur einen Weg, dies zu tun ist im Moment zu verwalten es selbst mit zwei Abfragen/mappings - eins zu füllen Foo mit allen seinen Feldern andere als seine Sammlung an Bars. Dann ein query-mapping wie die, die unten zu ziehen wieder alle Balken in einer Karte und stecken Sie diese in Ihre Foo-Objekt selbst:
Diese Rückkehr wird eine Karte mit einem Eintrag für jede bar, wo der Schlüssel für den Eintrag ist der Wert der "bar_name" - Spalte.
Die MyBatis-team empfohlen, das setzen in eine Ausgabe-Anforderung für dieses feature in einer zukünftigen Version.
Über MyBatis und HashMap , das ist effektiv das, was es ist.
HashMap-Klasse implementiert Gekennzeichnet . Karte ist ein inteface
daher weil HashMap implementiert, Map , HashMap IST eine Karte.
Ob Sie Generika Schlüssel,Wert am Ende-oder auch nicht.
http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html