본문 바로가기

Spring/Mybatis

[MyBatis] Spring쇼핑몰 프로젝트 - Mapper에 parameter 여러개 넘기기

VO로 묶여있지 않거나, 타입이 다른 복수의 parameter들을 전달할 때

HashMap 형태로 값을 보낼 수 있다.

 

1. 상품문의Service.java

판매자 페이지에서 상품 문의페이지를 출력하기 위한 service이다.

상품문의Service 에서 mapper로 전달할 parameter는

where절에 넣을 String 형태의 'sel_name(판매자명)'과

페이징 처리를 위해 limit에 넣어줄 int형태의 'pageIndex'가 있다.

 

sel_name은 현재 로그인한 member정보중 판매자 테이블에서 왜래키로 사용하고있는

mem_num으로 판매자정보를 불러왔고,

pageIndex는 페이지별로 결과값을 10개씩 받아올 수 있게 했다.

 

이 둘은 데이터타입이 다르기 때문에 parameterType을 통일할 수 없기 때문에

HashMap에 담아서 보내야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 세션에 있는 member정보 받기
HttpSession session = request.getSession();
MemberVO member = (MemberVO)session.getAttribute("member");
        
// 세션의 member.mem_num으로 판매자정보 불러오기
SellerVO seller = sellerDAO.getSellerInfo(member.getMem_num());
 
// 상품 문의 리스트를 출력할 parameter들을 map에 넣는다.
Map<String, Object> listIndexMap = new HashMap<String,Object>();
 
// mySQL의 limit에 넣어줄 값
int pageIndex = (page-1)*10;
        
listIndexMap.put("pageIndex", pageIndex);
listIndexMap.put("sel_name", seller.getSel_name());
        
// 페이지 인덱스(pageIndex)를 DAO 클래스에 전달한다.
sellergoodsQnaList = goodsQnaDAO.getGoodsQnaList(listIndexMap);    // 리스트를 받아옴
cs
 
2. 상품문의 Mapper.xml

HashMap 으로 값을 전달할 경우 Mapper에서 parameterType을 

"java.util.Map"으로 설정해야 한다.

값을 불러올 때에는 HashMap에 값을 담을때 설정한

key값으로 값을 불러올 수 있다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!-- 상품 문의글 가져오기 -->
<select id="select_goodsqna_list" parameterType="java.util.Map" resultType="goodsqna">
    select
        *
    from goodsqna gq
        left join goods g
             on g.gds_num = gq.gds_num
         left join goodsqnafiles gqf
             on gqf.num = gq.gdsqna_num
    where g.gds_seller=#{sel_name} 
          and gdsqna_delyn=1 
          and gdsqna_depth=0
    group by gdsqna_num
    order by gdsqna_num desc
    limit #{pageIndex}, 10
</select>
cs

 

콘솔창을 보면 값이 잘 넘어간 것을 확인할 수 있다.