Sto provando a produrre un sql che è il seguente in mybatis.Come eseguire l'iterazione tramite HashMap in MyBatis foreach?
SELECT COL_C
FROM TBLE_1
WHERE (COL_A, COL_B) in (('kp','kar'),('srt','sach'));
E il mio tipo di parametro di input è HashMap. Ora Come posso generare SQL dal file xml del mapper. Il codice seguente genera un'eccezione dicendo che la mappa è stata valutata come null.
<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>
Uno dei altro approccio è quello di creare una classe con campi valore chiave, creare un elenco di oggetti e quindi passare la parameterType
come list
che assomiglierebbe seguente.
<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>
Ma c'è un modo per il mio mapper di lavorare per il primo approccio? oltre a modificare la query in unione
** Attenzione: questo modo è rotto dalla versione 3.2.x **: - versione 3.2.x ha il supporto diretto per un mappa [numero 709] (https://code.google.com/p/mybatis/issues/detail?id=709) con _ _ e deve essere riscritto in questa nuova forma - vedi [numero 208] (https://github.com/mybatis/mybatis-3/pull/208) o @foghost solution –
Ben precisato –
@MichalBernhard Puoi postare la tua risposta? Ciò aiuterà molto gli altri visitatori. –