Ich versuche, eine SQL zu erzeugen, die wie unten in mybatis ist.Wie durch HashMap in MyBatis foreach zu iterieren?
SELECT COL_C
FROM TBLE_1
WHERE (COL_A, COL_B) in (('kp','kar'),('srt','sach'));
Und mein Eingabeparameter Typ ist HashMap. Jetzt Wie generiere ich SQL aus Mapper XML-Datei. Der folgende Code löst die Ausnahme aus, die besagt, dass map auf null ausgewertet wurde.
<select id="selectCOLC" parameterType="java.util.HashMap" resultType="String">
SELECT COL_C
FROM TBLE_1
WHERE (COL_A, COL_B) in
<foreach item="item" collection="#{map.keySet()}" open="((" separator="),(" close="))">
#{item},#{item.get(item)}
</foreach>
</select>
Einer der anderen Ansatz ist eine Klasse mit Schlüsselwertfelder zu erstellen, um eine Liste von Objekt erstellen und dann übergeben Sie die parameterType
als list
, die wie folgt aussehen würde.
<select id="selectCOLC" parameterType="list" resultType="String">
SELECT COL_C
FROM TBLE_1
WHERE (COL_A, COL_B) in
<foreach item="item" collection="list" open="((" separator="),(" close="))">
#{item.getKey()},#{item.getVal()}
</foreach>
</select>
Aber gibt es einen Weg zu meinem Mapper Arbeit für den ersten Ansatz? anders als Ändern der Abfrage zu Union
fein ** ACHTUNG: Diese Möglichkeiten seit Version 3.2.x ist gebrochen **: - Version 3.2.x hat direkte Unterstützung für eine Karte [Problem # 709] (https://code.google.com/p/mybatis/issues/detail?id=709) mit _ _ und es muss in dieses neue Formular umgeschrieben werden - siehe [Issue # 208] (https://github.com/mybatis/mybatis-3/pull/208) oder @foghost solution –
Gut darauf hingewiesen –
@MichalBernhard Können Sie bitte posten deine eigene Antwort? Das wird den Besuchern viel weiterhelfen. –