* where절에서 in을 쓰려면 myBatis에는 어떻게 해야할지에 대해 해결했다.

collection = 전달받은 인자값
item   = 전달받은 인자값을 다른이름으로 대체 
open = 해당 구문이 시작할 때 (
close = 해당구문이 끝날 때 )
separator = 한번 이상 반복할때 반복되는 사이에  해당 문을 넣어줌

 

<foreach item="item" index="index" collection="list"
      open="(" separator="," close=")">
      #{item}
</foreach>

 

이러한 형태로 where절 구문 뒤에 여러 값이 동적으로 들어가야한다면  

 ForEach를 이용하여 쉽게 데이터를 가져올 수 있다.

 

다만, list에 들어가는 데이터 타입은 Map이나 Array여야 한다.

(HashMap으로 하니 오류가 났다)

 

 

 

* 실제 구현한 코드

 

 - 이번 만드는 프로젝트에서 이 부분은 Search 기능이다. 특정 태그를 클릭하면 해당 태그에 대해 검색하는데 

1) 태그를 클릭하면

2) 태그 테이블에서 해당 태그가 등록된 포스트 번호를 가져와서

3) 포스트 테이블에서 select 하여 검색 결과로 나타내준다.

 

 

 * Controller

/* 노하우 검색 리스트 */
@RequestMapping("/service/knowhowSearch.do")
public ModelAndView knowhowSearchList(HttpServletRequest request){
	String tag_name=request.getParameter("tag_name");

	ModelAndView mView=knowhowService.Searchlist(tag_name);
	mView.setViewName("service/knowhowSearch");
	return mView;        
}    

 

* Service

@Override
public ModelAndView Searchlist(String tag_name) {
	List<Integer> kh_nums = knowhowTagDao.findPost_num(tag_name);
	List<KnowhowDto> list = knowhowDao.getSearchList(kh_nums);
	ModelAndView mView = new ModelAndView();
	mView.addObject("list", list);
	return mView;
}    

 

* 태그 관련 Dao

@Override
public List<Integer> findPost_num(String tag_name){
	List<Integer> kh_num = session.selectList("knowhowTag.findKh_num", tag_name);
	System.out.println("findPost_num:"+kh_num.get(0));
	return kh_num;
}

 

* 태그 관련 Mapper

<select id="findKh_num" resultType="java.util.HashMap" parameterType="string">
	SELECT tag_kh_num
	FROM kh_tag
	WHERE tag_name=#{tag_name}        
</select>

 

* 포스트 관련 Dao

@Override
public List<KnowhowDto> getSearchList(List<Integer> kh_nums){
	List<KnowhowDto> list = session.selectList("knowhow.getSearchList", kh_nums);
	return list;
}    

 

* 포스트 관련 Mapper

<select id="getSearchList" resultType="knowhowDto" parameterType="java.util.Map"> 
	SELECT kh_num, kh_title, kh_filePath, kh_content, kh_regr_id, kh_reg_dtime, kh_disp_tf
	FROM kh_board 
	WHERE kh_num in
	<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
		#{item.tag_kh_num}
	</foreach>        
	ORDER BY kh_num DESC 
</select>

 

 

 

 



출처: https://heekim0719.tistory.com/231 [생각하며 개발하자, 별토끼의 프로그래밍]

+ Recent posts