앙되요

[mybatis] mapper.xml에서 parameterType 여러개(2개 이상) 주는 방법 본문

Spring & Maven & Mybatis

[mybatis] mapper.xml에서 parameterType 여러개(2개 이상) 주는 방법

앙되요 2011. 12. 27. 11:24
쿼리를 작성하다보면 파라미터를 여러개를 줄 경우가 있다.

쿼리를 작성하는 mapper.xml에서 여러개의 변수를 받아 해결해야하는데

예제를 봐도 여기 저기를 찾아봐도 하나만 쓰는 예제만 있지 여러개는 없다.

그래서 어떻게 해결해야하나 고민하다 발견!!!

고생했다 ㅜㅜ

자 Mapper interface 에서 저렇게 map으로 구성된 변수 2개를 넣어주고.

public interface UserMapper {
List<HashMap<?,?>> selectUser(Map<String, String> h, Map<String, String> h2);
}
 
 밑에 mapper xml에서 하던데로 parameterType을 hashmap으로 설정해 두고

  <select id="selectUser" parameterType="hashmap" resultType="hashmap">
select user_id as userId
    , user_nm as userNm  
from t_user_m
where user_id = #{0.a}
and user_id = #{1.b} 
</select>

#{0.a}  == > 첫번째 hashmap의 값 호출
#{1.b}  == > 두번째 hashmap의 값 호출  

이렇게 하니 제대로 받아진다.!! 유레카!!

아직까지 확인된 방법은 같은 형식으로 된 것만 된다는 것.

또다른 방법의 한가지.

VO객체를 만든다

그리고 VO 객체에 hashmap을 받을수 있게 2개를 만든다.

그리고 거기다가 hashmap 2개를 집어 넣는다

xml에서 hashmap id.key 하면 읽어진다.
 
vo

private Map<String, String> h;
private Map<String, String> h2;

        public Map<String, String> getH() {
return h;
}
public void setH(Map<String, String> h) {
this.h = h;
}
public Map<String, String> getH2() {
return h2;
}
public void setH2(Map<String, String> h2) {
this.h2 = h2;
}
 
service

public List<HashMap<?, ?>> selectUser() {
Map<String, String> h = new HashMap<String, String>();
h.put("a", "admin");
Map<String, String> h2 = new HashMap<String, String>();
h2.put("b", "admin2");
UserVO vo = new UserVO(); 
vo.setH(h);
vo.setH2(h2);
return userMapper.selectUser(vo);


 map

<select id="selectUser" parameterType="user" resultType="hashmap">
select user_id as userId
    , user_nm as userNm  
from t_user_m
where 1=1
<choose>
<when test="h.a != null">
and user_id =  #{h.a}
</when>
<otherwise>
</otherwise>
</choose>
</select>