게시글 / 카테고리 검색
- ComuServiceImpl은 ComuMapper와 MemberMapper를 사용하여 데이터베이스와 상호작용하며, ComuService 인터페이스의 메서드를 구현하여 비즈니스 로직을 수행하는 역할을 합니다.
- 한마디로 서비스 클래스는 데이터베이스와 상호작용을 담당하는 메서드를 가지고 있습니다.
- DTO는 데이터를 담는 용도로 주로 사용됩니다. 데이터의 구조를 표현하기 위해 필드(속성)를 가지고 있으며, 주로 getter와 setter 메서드를 포함하여 데이터에 접근하는 기능을 제공합니다. DTO는 데이터를 주거나 반환하는데 쓰임새가 있습니다.
- 컨트롤러 클래스는 사용자의 요청을 받아 해당 요청에 맞는 메서드를 호출하여 비즈니스 로직을 수행하고, 그 결과를 모델에 담아서 뷰로 전달합니다.
코드
<when test='option=="W"'>
SELECT tp.post_id, tp.post_title, tp.post_content, tp.post_ctgr_id, tp.post_created_time, tp.post_view_count, tp.user_email, tp.user_name
FROM tb_post tp
INNER JOIN tb_user tu ON tp.user_email = tu.user_email
WHERE post_ctgr_id = #{post_ctgr_id}
AND tu.user_nickname LIKE concat('%', #{keyword}, '%')
</when>
위의 코드는 "tb_post" 테이블과 "tb_user" 테이블을 조인하여 특정 카테고리에 속하고 사용자 닉네임에 특정 키워드가 포함된 게시물을 검색하는 쿼리입니다.
<select id="searchCategoryPage" parameterType="map" resultType="ComuDTO">
"searchCategoryPage"라는 ID를 가진 쿼리 매핑은 매개변수로 맵 형태의 입력을 받고, "ComuDTO" 형식의 결과를 반환합니다. MyBatis의 매개변수와 결과 타입은 XML 파일에서 해당 매핑 구문을 찾고 연결하는 데 사용됩니다.
@Service
public class ComuServiceImpl implements ComuService{
@Autowired
ComuMapper comuMapper;
@Autowired
MemberMapper memberMapper;
ComuServiceImpl 클래스는 ComuService 인터페이스를 구현하며, ComuMapper와 MemberMapper를 의존성으로 주입받아 데이터베이스 연산을 수행할 수 있습니다. 이 클래스는 비즈니스 로직을 구현하는데 사용될 수 있습니다.
@Override
public int getSearchResultCnt(SearchItem sc) throws Exception {
return comuMapper.searchResultCnt(sc);
}
public int getCategoryResultCnt(Integer post_ctgr_id, SearchItem sc) throws Exception {
Map map = new HashMap();
map.put("post_ctgr_id", post_ctgr_id);
map.put("keyword", sc.getKeyword());
map.put("option", sc.getOption());
return comuMapper.categoryResultCnt(map);
}
@Override
public List<ComuDTO> getSearchSelectPage(SearchItem sc) throws Exception {
List<ComuDTO> comuDTOs = comuMapper.searchSelectPage(sc);
return comuDTOs;
}
@Override
public List<ComuDTO> getSearchCategoryPage(Integer post_ctgr_id, SearchItem sc) throws Exception {
Map map = new HashMap();
map.put("post_ctgr_id", post_ctgr_id);
map.put("keyword", sc.getKeyword());
map.put("pageSize", sc.getPageSize());
map.put("offset", sc.getOffset());
map.put("option", sc.getOption());
List<ComuDTO> comuDTOs = comuMapper.searchCategoryPage(map);
return comuDTOs;
}
getSearchResultCnt
검색 조건에 해당하는 게시물 검색 결과의 개수를 반환하는 메서드입니다. SearchItem 객체를 매개변수로 받아 해당 검색 조건을 사용하여 comuMapper의 searchResultCnt 메서드를 호출하여 검색 결과의 개수를 반환합니다.
getCategoryResultCnt
특정 카테고리에 해당하는 게시물 검색 결과의 개수를 반환하는 메서드입니다. post_ctgr_id와 SearchItem 객체를 매개변수로 받아 해당 카테고리와 검색 조건을 사용하여 comuMapper의 categoryResultCnt 메서드를 호출하여 검색 결과의 개수를 반환합니다.
getSearchSelectPage
검색 조건에 해당하는 게시물을 페이지별로 조회하는 메서드입니다. SearchItem 객체를 매개변수로 받아 해당 검색 조건을 사용하여 comuMapper의 searchSelectPage 메서드를 호출하여 페이지별로 검색 결과를 조회한 후, ComuDTO 객체의 리스트로 반환합니다.
getSearchCategoryPage
특정 카테고리에 해당하고 검색 조건에 해당하는 게시물을 페이지별로 조회하는 메서드입니다. post_ctgr_id와 SearchItem 객체를 매개변수로 받아 해당 카테고리와 검색 조건을 사용하여 comuMapper의 searchCategoryPage 메서드를 호출하여 페이지별로 검색 결과를 조회한 후, ComuDTO 객체의 리스트로 반환합니다. 이 때, 페이지 크기(pageSize)와 오프셋(offset)도 함께 매개변수로 전달하여 특정 페이지의 결과를 조회할 수 있습니다.
위의 메서드들은 검색 기능을 구현하기 위한 것으로, 데이터베이스에 쿼리를 실행하여 검색 결과를 가져오거나 검색 결과의 개수를 반환합니다. 이를 통해 사용자가 원하는 검색 조건에 따라 게시물을 조회하고, 페이지별로 결과를 반환할 수 있습니다.
'코딩 학원(국비지원) > 코딩 팀프로젝트' 카테고리의 다른 글
게시판 시퀀스 다이어그램(sequence_diagram) 그리기 (2) | 2023.06.20 |
---|---|
게시판 유즈케이스 다이어그램(usecase_diagram) 그리기 (2) | 2023.06.20 |
[팀프로젝트] 게시판 만들기 진행 상황 및 보완점 (3) | 2023.06.08 |
게시판 글쓰기 버튼 클릭 시 로그인 체크하기. (2) | 2023.06.04 |
게시판 댓글 기능 구현하기. 댓글 오류 발생. (0) | 2023.05.23 |