본문 바로가기
Today I learned

쿼리 결과가 다중컬럼, 다중로우일때 VO 생성 안하고 가져오기.

by soheemon 2019. 3. 21.


//쿼리결과가 다중컬럼, 다중로우일때. 

원래는 컬럼에따라 VO를 생성해서 resultType을 해당 VO로 받았었다.(자동으로 List만들어주니깐!)


하지만 이제 VO생성하는 방법은 잘 안쓴다구 함....

이름

전화번호 

주소 

생년월일 

황소희 

111-111-111-11 

우리집

031010 

황소현 

111-11-11 

우리동네 

931010 



따라서 VO대신 Key와 Value값으로 받아야 함. ResultType을 Map으로 한다.

<select id="getMenu" resultType="Map">

select * from menu

where menu_view_yn = 'Y'

order by menu_order

</select>


결과가 단일로우면 Map으로 가져와서 사부작사부작 하면되지만

다중로우기 때문에 selectList메서드로 List로 받아온다.

하지만 슬프게도 selectList는 List<Object>만 return하기때문에...

Map을 하나씩 for문으로 받아서 캐스팅하여 사용한다.


@RequestMapping(value="/stepThree")

public void stepThree(Model model) {

List<Object>menues = sqlSessionTemplate.selectList("testmp.getMenu");

ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();

for(Object oj: menues) {

HashMap<String, String> menu = (HashMap<String, String>) oj;

list.add(menu);

}

}

여기서 의문.

Object를 넘기면 jstl에서 받아 쓸 수 있을까?

Model로 넘기기전에 ObjectList를 MapList로 변환해서 넘겨야 할까?



댓글