스프링 - 댓글기능처리(2)

지환·2024년 1월 4일
0

그룹웨어

목록 보기
9/17

어노테이션

@Controller("memberController") 
public class MemberController{
}
  • @Controller("memberController")

    • MemberController memberController = new MemberController() 같은 의미이다. 줄여서 쓰면 안된다. (ApplicationContext 기반 - 어노테이션)

    • <bean id = "memberController class = com.example.demo.controller.MemberController"/> - xml 기반(BeanFactoty기반) 같은 의미다.


ViewResolver 필요한 경우 - 페이지요청 + forward - select문

DataSet - 마임타입 - text/plain, application/json

@RestController : Front-end와 Back-End가 완전한 분리


몰랐던 부분

  1. VO 안 VO 계층적구조를 사용하는데 문제가 있나?
    -> No. 가독성문제 / 아와 같은 방식으로도 사용가능
    -> 필자 Builder 도전했다가 실패... (이 부분 도전 하실 분 도전해서 해결해주세요)

  2. Select 쿼리문을 마이바티스에서 진행하는데, 만약에 조회하는 컬럼의 개수가 VO/DTO개수와 일치하지 않는다면?
    -> 없는 값들은 초기 DTO/VO 필드 전역변수로 선언된 초기값으로 설정으로 되고,
    -> 나머지 조회된 값들은 매핑된다.
    -> 매핑되는 순서는 바뀔 수 있다.

2-1) (헷갈렸던 부분) 서로 컬림이 일치하지 않으면 문자열이 뜨는거 아닌가요?
-> Insert/Update/Delete 에서만 이와같은 오류가 발생

2-2) SELECT 컬럼 AS ~~ 별칭을 줘서 매핑시켜도 되나요?
-> 굳이..? 그냥 써..


댓글 구현(백단)

@RequestMapping(value=~) 이용해보기

BoardController.java
    @RequestMapping(value = "boardDetail")
    public String boardDetail(@RequestParam Map<String, Object> rmap, Model model) {
        logger.info("boardDetail");
        List<Map<String, Object>> bList = null;
        bList = boardLogic.boardDetail(rmap);
        model.addAttribute("bList", bList);
        return "forward:./boardDetail.jsp";
    }

BoardLogic.java

    public List<Map<String, Object>> boardDetail(Map<String, Object> pmap) {
        logger.info("boardDetail");
        List<Map<String, Object>> totalList = new ArrayList<>();

        List<Map<String, Object>> list = new ArrayList<>();
        list = boardDao.boardList(pmap); // 리스트 결과값을 가져와서 map에 담아야함 [{}]
        Map<String, Object> detailmap = list.get(0);
        totalList.add(detailmap);

        int result = Integer.parseInt(list.get(0).get("B_NO").toString());
        String b_no = String.valueOf(result);
        logger.info(b_no);

        boardDao.boardUpdate(b_no);

        list = boardDao.boardDetail(pmap); // 댓글처리 접근 <자손> 리스트로 반환되어 나옴
        detailmap = list.get(0);
        totalList.add(1, detailmap);

        // detailmap = list.get(0);
        // totalList.add(detailmap);

        // 조회수를 수정하는 로직을 이 안에서 분리할 수 없다.

        return list;
    }

BoardDao.java

    public List<Map<String, Object>> boardDetail(Map<String, Object> pmap) {// gubun:n_title, keyword:휴관
        logger.info("boardDetail");
        // JAVA -> MyBatis -> Oracle

        List<Map<String, Object>> dlist = sqlSessionTemplate.selectList("boardDetail", pmap);

        return dlist;
    }

    public void boardUpdate(String b_no) {
        sqlSessionTemplate.update("boardUpdate",b_no);
    }

Board.xml

	<select id="boardDetail" parameterType="map" resultType = "map">
		SELECT b.bc_no, b.bc_writer, b.bc_comment
		FROM  board230527 a, board230527_comment b 
		WHERE 
		a.b_no=b.b_no(+)
		<if test="b_no!=null">
			AND a.b_no=#{b_no}
		</if>
	</select>

	<update id="boardUpdate" parameterType="String">
		UPDATE board230527

		SET b_hit = b_hit+1

		WHERE b_no = #{b_no}
	</update>

다른 방법으로 구현 하신 분 있다면 같이 공유해서 공부해요~
Test Url : http://localhost:8000/board/boardDetail?b_no=2


다음 학습 목표 계층적 vo를 통해서 구현해보자.

profile
아는만큼보인다.

0개의 댓글