반응형
동적SQL 처리하기 : ForEach
* where절에서 in을 쓰려면 myBatis에는 어떻게 해야할지에 대해 해결했다.
collection = 전달받은 인자값
item = 전달받은 인자값을 다른이름으로 대체open = 해당 구문이 시작할 때 (close = 해당구문이 끝날 때 )separator = 한번 이상 반복할때 반복되는 사이에 해당 문을 넣어줌
<foreach item="item" index="index" collection="list"
open="(" separator="," close=")">
#
</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=#
</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=")">
#
</foreach>
ORDER BY kh_num DESC
</select>
반응형
'개발노트' 카테고리의 다른 글
[개발 팁] Mac, Chrome, IntelliJ 자주 쓰는 단축키 모음 (6) | 2020.05.17 |
---|---|
[개발상식] TDD(Test-Driven-Development) 개념 (0) | 2018.04.09 |
Uncaught SyntaxError: Unexpected token < 에러 (0) | 2018.02.06 |
MyBatis insert 후 auto_increment값 바로 가져오기 (0) | 2018.02.04 |
For input string: "post_title" 에러 (2) | 2018.02.04 |
댓글