복붙노트

[SQL] 어떻게 반복의 MyBatis의 foreach에서의 HashMap을 통해?

SQL

어떻게 반복의 MyBatis의 foreach에서의 HashMap을 통해?

나뿐만 MyBatis로의 아래에있는 SQL을 생산하기 위해 노력하고있어.

SELECT COL_C
FROM TBLE_1
WHERE (COL_A, COL_B) in ( ('kp','kar'),('srt','sach'));

그리고 내 입력 매개 변수 유형의 HashMap이다. 이제 어떻게 매퍼 XML 파일에서 SQL을 생성 할. 아래의 코드는 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>

다른 방법 중 하나는 키 값 필드가있는 클래스를 만들 개체의 목록을 만든 다음 다음과 같을 것이다 목록으로 parameterType을 전달하는 것입니다.

<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>

그러나 첫 번째 방법에 대한 내 매퍼 작업 할 수있는 방법이 있습니까? 노동 조합에 대한 쿼리를 변경 이외의

해결법

  1. ==============================

    1.이 솔루션은 버전 3.2 이후 일을하지 않습니다 - 문제 # 208에서 더 볼!

    이 솔루션은 버전 3.2 이후 일을하지 않습니다 - 문제 # 208에서 더 볼!

    마지막으로 나는 HashMap에 대한 솔루션을했습니다

    나는 그것이 반복 가능하게하기 위해 entrySet ()를 사용해야

    <select id="selectCOLC" parameterType="map" resultType="kpMap">
        SELECT COL_C
        FROM TBLE_1
        WHERE (COL_A, COL_B) in 
        <foreach item="item" collection="entries.entrySet()" open="((" separator="),(" close="))">
            #{item.key},#{item.value}
        </foreach>
    </select>
    

    하나 더 Isue 내가 직면 매개 변수 이름이 주입 가져 오지 하였다, 따라서 추가 파라미터 : 주석

    따라서 매퍼 인터페이스의 모습은 다음과 같은.

    List<TblData> selectCOLC(@Param("entries")
                HashMap<String, String> entries)
    
  2. ==============================

    2.이 내 프로젝트의 예이며, 그것을 잘 작동합니다

    이 내 프로젝트의 예이며, 그것을 잘 작동합니다

    <select id="getObject" parameterType="Map" resultType="hashmap">    
        select * from TABL where 
        <foreach  collection="dataMap"  index="key" item="value"  open=""  separator=" and "  close="">
            #{key}=#{value}
        </foreach>
    </select>
    
  3. ==============================

    3.첫 번째 예에서 MyBatis로 키 "지도"로 된 parameterMap의 항목을 찾고있다. 나는 당신이 실제로 반복 처리로 된 parameterMap의 키 세트를 시도하고 있다고 생각한다. 당신은 키 "지도"를 사용하여 매개 변수지도에서지도를 중첩 된 경우 작동합니다.

    첫 번째 예에서 MyBatis로 키 "지도"로 된 parameterMap의 항목을 찾고있다. 나는 당신이 실제로 반복 처리로 된 parameterMap의 키 세트를 시도하고 있다고 생각한다. 당신은 키 "지도"를 사용하여 매개 변수지도에서지도를 중첩 된 경우 작동합니다.

    두 번째 예제에서는 그냥하는 getKey 그리고 getValue을 제공 HashMap.entrySet ()를 통과 할 수 있어야한다.

  4. ==============================

    4.MyBatis로 3.5의 사용자로서,이를 통해왔다.

    MyBatis로 3.5의 사용자로서,이를 통해왔다.

    불행하게도, 솔루션 아무도 여기에 나를 위해 일한 게시 된 그러나 이것은 않습니다 :

    <foreach collection="_parameter.entrySet()" index="key" item="element" separator=",">
        MY_COLUMN = #{key} AND MY_OTHER_COLUMN = #{element}
    </foreach>
    

    그래서, 내 경우 컬렉션 = "_ parameter.entrySet는 ()"트릭은 않았다!

    또한, parameterType에 대한 없음 사양이 필요했다.

  5. from https://stackoverflow.com/questions/18388936/how-to-iterate-through-hashmap-in-mybatis-foreach by cc-by-sa and MIT license