[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.이 솔루션은 버전 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.이 내 프로젝트의 예이며, 그것을 잘 작동합니다
이 내 프로젝트의 예이며, 그것을 잘 작동합니다
<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.첫 번째 예에서 MyBatis로 키 "지도"로 된 parameterMap의 항목을 찾고있다. 나는 당신이 실제로 반복 처리로 된 parameterMap의 키 세트를 시도하고 있다고 생각한다. 당신은 키 "지도"를 사용하여 매개 변수지도에서지도를 중첩 된 경우 작동합니다.
첫 번째 예에서 MyBatis로 키 "지도"로 된 parameterMap의 항목을 찾고있다. 나는 당신이 실제로 반복 처리로 된 parameterMap의 키 세트를 시도하고 있다고 생각한다. 당신은 키 "지도"를 사용하여 매개 변수지도에서지도를 중첩 된 경우 작동합니다.
두 번째 예제에서는 그냥하는 getKey 그리고 getValue을 제공 HashMap.entrySet ()를 통과 할 수 있어야한다.
-
==============================
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에 대한 없음 사양이 필요했다.
from https://stackoverflow.com/questions/18388936/how-to-iterate-through-hashmap-in-mybatis-foreach by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 동적으로 생성 된 테이블에서 엔티티 프레임 워크를 사용하여 데이터를 쿼리 (0) | 2020.05.24 |
---|---|
[SQL] 제거 및 날짜 범위를 중복 감소 (0) | 2020.05.24 |
[SQL] UNION ALL 대 OR 조건 SQL 서버 쿼리 (0) | 2020.05.24 |
[SQL] 어떻게 sqlite가 테이블 안에 데이터가 있는지 확인할 수 있습니까? (0) | 2020.05.24 |
[SQL] SQL 뷰에 기본 키를 추가 (0) | 2020.05.24 |