240702 FinalProject

PangE·2024년 7월 6일

오늘은 Detail(상세보기)를 만들어 보겠다.

진짜 이부분이 할게 많다


이런식으로 책처럼만드는것과


이런식으로 리스트로 쭉 뽑는것 두가지 버전을 만들어야한다

detail(상세보기) 가장많은 ajax를 활용하게 된다

버튼이 클릭할때마다 리스트형식과 책형식을 번갈아가면서 나타낼 예정이다

1. xml 만들기

<!--레시피 boardNo 가져오기 Detail-->
	<select id="getBoard"  resultType="RecipeBoard">
		select * from Recipe_Board where board_no = #{boardNo};
	</select>
    
     <!--boardNo의 재료들 출력-->
  <select id="getMaterialList" resultType="Material">
    SELECT m.*
	FROM recipe_board rb
	INNER JOIN material m ON rb.board_no = m.board_no
	WHERE rb.board_no = #{boardNo};
  </select>

  <!-- boardNO의 요리과정리스트 -->
<select id="getCookList" resultType="Cooking"  parameterType="int">
SELECT c.*
FROM recipe_board rb
INNER JOIN cooking c ON rb.board_no = c.board_no
WHERE rb.board_no = #{boardNo};
</select>
	
	<!--요리과정 재료-->
	<select id="cookMaterList" parameterType="hashmap">
		SELECT cm.*  FROM cook_material cm   WHERE cm.cooking_id = #{cookingId};
	</select>	
  
  <!--cookid를 가져오기위함 -->
 	<select id="cookidCheck" resultType="int">
    SELECT c.cooking_id
	FROM recipe_board rb
	INNER JOIN cooking c ON rb.board_no = c.board_no
	WHERE rb.board_no = #{boardNo} ;
  </select>
  
  <!--bookpage 를 나타냄-->
  <select id="cookCount" resultType="int">
    SELECT count(*)
	FROM recipe_board rb
	INNER JOIN cooking c ON rb.board_no = c.board_no
	WHERE rb.board_no = #{boardNo};

  </select>
 

2. mapper 만들기

// boardNo의 레시피 요리 순서
	  List<Cooking> getCookList(@Param("boardNo") int boardNo);
		
		// boardNo의 레시피 요리페이지 카운트
		int cookCount(int boardNo);

		// boardNo의 재료들
		List<Material> getMaterialList(int boardNo);
		
		// boardNo의 상세보기
		RecipeBoard getBoard(int boardNo);
		
		// boardNo의 조리과정의 재료들
		List<CookMaterial> cookMaterList(Map<String, Object> params);
		
		// boardNo의 cookingId 출력
		List<Integer> cookidCheck(int boardNo);

3.서비스 만들기

// boardno 레시피
	public RecipeBoard getRecipe(int BoardNo) {
		return recipeMapper.getBoard(BoardNo);
	}

	// boardNo의 cooking 조리방법리스트
	public List<Cooking> getCookList(int boardNo) {
		return recipeMapper.getCookList(boardNo);
	}

	// boardno의 cooking 카운트 (책페이지수)
	public int cookCount(int boardNo) {
		return recipeMapper.cookCount(boardNo);
	}

	// boardNo 의 재료
	public List<Material> getMaterialList(int boardNo) {
		return recipeMapper.getMaterialList(boardNo);
	}

	// boardNo 의 cooking 각 요리과정 재료 리스트
	public List<CookMaterial> cookMaterList(int cookingId, int boardNo) {

		Map<String, Object> params = new HashMap<>();
		params.put("cookingId", cookingId);
		params.put("boardNo", boardNo);
		return recipeMapper.cookMaterList(params);
	}

	// cookingId 의시작 을 알기위한 매서드
	public List<Integer> cookIdCheck(int boardNo) {
		return recipeMapper.cookidCheck(boardNo);
	}
// boardNo 의 cooking 각 요리과정 재료 리스트
	public List<CookMaterial> cookMaterList(int cookingId, int boardNo) {
		Map<String, Object> params = new HashMap<>();
		params.put("cookingId", cookingId);
		params.put("boardNo", boardNo);
		return recipeMapper.cookMaterList(params);
	}

여기서 진짜 고생했었어요 두개의 값을 가져가야 select가 가능한데 예전에 spring할때
배웠었는데 두개 이상 보내주질 못해서 가져갈려면 맵에 담아서 가져가야 된다는걸 까먹어가지고 그래서 계속 이름이 일치 안하는지 계속 몇번이나 확인했는지 몰라요....

4.컨트롤러 만들기


@GetMapping("/recipeDetail")
	public String getRecipe(Model model,@RequestParam("boardNo")int boardNo, HttpSession session) {
	    
		//id 세션저장 나중에 로그인 기능 나오면 삭제
	   String id = recipeService.getRecipe(boardNo).getMemberId();
	   session.setAttribute("id", id);
	    model.addAttribute("id",id);
	    
	    
        // 책에 리스트가 얼마나 있을지 카운트 
	    int cCount =recipeService.cookCount(boardNo);	 
        // 조리과정의 재료리스트
	    for(int z=0; z<cCount;z++) {
		    int cookingId = recipeService.cookIdCheck(boardNo).get(z);
		    model.addAttribute("cMList"+z, recipeService.cookMaterList(cookingId,boardNo));
		   
		    
	    }
	    
	    //조리과정리스트
	    model.addAttribute("cList",  recipeService.getCookList(boardNo));
	    //  상세보기
		model.addAttribute("rList",recipeService.getRecipe(boardNo));
		// 책리스트 카운트
		model.addAttribute("bookCount",recipeService.cookCount(boardNo));
		// 조리과정 no의 초기값
		model.addAttribute("cookingId",recipeService.cookIdCheck(boardNo).get(0));
		// 재료리스트
		model.addAttribute("mList",recipeService.getMaterialList(boardNo));
		return "views/recipeDetail";
	}

             

요기까지 만들고 내일은 폼과 js 공포의 ajax 를 만들거에요

                                                         

0개의 댓글