오늘은 Detail(상세보기)를 만들어 보겠다.
진짜 이부분이 할게 많다

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

이런식으로 리스트로 쭉 뽑는것 두가지 버전을 만들어야한다
detail(상세보기) 가장많은 ajax를 활용하게 된다
버튼이 클릭할때마다 리스트형식과 책형식을 번갈아가면서 나타낼 예정이다
<!--레시피 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>
// 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);
// 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할때
배웠었는데 두개 이상 보내주질 못해서 가져갈려면 맵에 담아서 가져가야 된다는걸 까먹어가지고 그래서 계속 이름이 일치 안하는지 계속 몇번이나 확인했는지 몰라요....
@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 를 만들거에요