[세미프로젝트] 0916구현

hanahana·2022년 9월 17일
0
post-thumbnail
  • 어제 너무 피곤해서 구현한걸 블로그에 정리한다는걸 깜박했다
  • 9월 16일 작성한것
    • 레시피 컨트롤러 사진을 제외한 테이블 업데이트
    • 서비스, 스토어, 매퍼에 해당 코드 입력

Controller

/**
* 레시피 등록 컨트롤러
*
* @param recipe
* @param rStep
* @param rMaterial
* @param rTag
* @param mv
* @param mainPic
* @param detailPic1
* @param detailPic2
* @param detailPic3
* @param detailPic4
* @param detailPic5
* @param detailPic6
* @param detailPic7
* @param detailPic8
* @param detailPic9
* @param detailPic10
* @param session
* @return
*/
@RequestMapping(value = "/recipe/regist.do", method = RequestMethod.POST)
public ModelAndView registRecipe(@ModelAttribute Recipe recipe, @ModelAttribute RecipeStep rStep,
@ModelAttribute RecipeMaterial rMaterial, @ModelAttribute RecipeTag rTag, ModelAndView mv,
@RequestParam(value = "mainPicture", required = false) MultipartFile mainPicture,
@RequestParam(value = "recipePicture1", required = false) MultipartFile recipePicture1,
@RequestParam(value = "recipePicture2", required = false) MultipartFile recipePicture2,
@RequestParam(value = "recipePicture3", required = false) MultipartFile recipePicture3,
@RequestParam(value = "recipePicture4", required = false) MultipartFile recipePicture4,
@RequestParam(value = "recipePicture5", required = false) MultipartFile recipePicture5,
@RequestParam(value = "recipePicture6", required = false) MultipartFile recipePicture6,
@RequestParam(value = "recipePicture7", required = false) MultipartFile recipePicture7,
@RequestParam(value = "recipePicture8", required = false) MultipartFile recipePicture8,
@RequestParam(value = "recipePicture9", required = false) MultipartFile recipePicture9,
@RequestParam(value = "recipePicture10", required = false) MultipartFile recipePicturee10,
HttpSession session, HttpServletRequest request) {
try {
// 레시피 전달
		int result = rService.registRecipe(recipe);

		// 레시피 재료 리스트 만들어서 전달하기
		ArrayList<RecipeMaterial> rmList = new ArrayList<RecipeMaterial>();
		String amount[] = rMaterial.getAmount().split(",");
		String material[] = rMaterial.getMaterial().split(",");
		for (int i = 0; i < material.length; i++) {

			// 재료나 수량이 비어있지 않을때만 List에 저장
			if (!amount[i].equals("") && !material[i].equals("")) {
				RecipeMaterial rMaterialOne = new RecipeMaterial();
				rMaterialOne.setAmount(amount[i]);
				rMaterialOne.setMaterial(material[i]);
				rMaterialOne.setMaterialOrder(i + 1);
				rmList.add(rMaterialOne);
			}

		}
		int result1 = rService.registMaterial(rmList);

		// 레시피 순서 리스트 만들어서 전달하기

	

		ArrayList<RecipeStep> rsList = new ArrayList<RecipeStep>();
		String arrDescription[] = rStep.getRecipeDescription().split(",");
		for (int i = 0; i < arrDescription.length; i++) {
			// 레시피 설명이 비어있지 않을때만 저장
			if (!arrDescription[i].equals("")) {
				RecipeStep rStepOne = new RecipeStep();
				rStepOne.setRecipeDescription(arrDescription[i]);
				rStepOne.setRecipeOrder(i + 1);
				rsList.add(rStepOne);
			}
		}
		int result2 = rService.registStep(rsList);

		// 레시피 태그 true false로 받음
		int result3 = rService.registTag(rTag);

	} catch (Exception e) {
		mv.addObject("msg", e.getMessage());
		mv.setViewName("common/error");
	}
	return mv;
}

Service와 Store 클래스

/**
	 * 레시피 등록
	 */
	@Override
	public int registRecipe(Recipe recipe) {
		int result = rStore.insertRecipe(recipe, session);
		return result;
	}
	
	
	/**
	 * 레시피 순서 등록
	 */
	@Override
	public int registStep(List<RecipeStep> rsList) {
		int result = rStore.insertStep(rsList, session);
		return result;
	}
/**
 * 레시피 태그 등록
 */
	@Override
	public int registTag(RecipeTag rTag) {
		int result = rStore.insertTag(rTag, session);
		return result;
	}

	/**
	 * 레시피 재료 등록
	 */
	@Override
	public int registMaterial(List<RecipeMaterial> rmList) {
		int result = rStore.insertMaterial(rmList, session);
		return result;
	}
/**
	 * 레시피 등록
	 */
	@Override
	public int insertRecipe(Recipe recipe, SqlSessionTemplate session) {
		int result = session.insert("RecipeMapper.insertRecipe", recipe);
		return result;
	}
/**
 * 레시피 순서등록
 */
	@Override
	public int insertStep(List<RecipeStep> rsList, SqlSessionTemplate session) {
		int result=0;
		for(int i =0; i<rsList.size();i++) {
		result=	session.insert("RecipeMapper.insertRecipeStep",rsList.get(i));
		}
		return result;
	}

	/**
	 * 레시피 태그 등록
	 */
	@Override
	public int insertTag(RecipeTag rTag, SqlSessionTemplate session) {
		int result = session.insert("RecipeMapper.insertTag", rTag);
		return result;
	}
/**
	 * 레시피 재료 등록
	 * 
	 */
	@Override
	public int insertMaterial(List<RecipeMaterial> rmList, SqlSessionTemplate session) {
		int result = 0;
		for (int i = 0; i < rmList.size(); i++) {
			RecipeMaterial rMaterial = rmList.get(i);
			result += session.insert("RecipeMapper.insertRecipeMaterial", rMaterial);
		}
		return result;
	}

Mapper

<mapper namespace="RecipeMapper">

<insert id="insertRecipe">

insert into recipe_tbl values(seq_recipe_no.nextval,#{recipeName},#{recipeInfo},#{mainPic},default,#{recipeCategory},#{recipeVideo},default,#{memberEmail},default,default,#{recommandCount},#{mainPicRename})

</insert> 

<insert id="insertRecipeMaterial">
insert into recipe_material values(#{materialOrder},seq_recipe_no.currval,#{material},#{amount})
</insert>

<insert id="insertRecipeStep">
insert into recipe_step values(#{recipeOrder},seq_recipe_no.currval,#{recipeDescription},#{recipePic},#{recipePicRename})
</insert>

<insert id="insertTag">
insert into recipe_tag values(seq_recipe_no.currval,#{jmt},#{healthy},#{goodSpicy},#{full},#{soSpicy},#{sweet},#{easy},#{party})
</insert>

</mapper>

기억할 만한점

  • 코드를 다 썼는데 계속 오류가 나서 강사님께 많이 헬프요청을 했다.
  • 원인은 거의댜 null이었는데 mybatis-config에 null인식하는 코드를 적어놓지 않은게 문제였다.
  • 각각 class에 @servic @autowired @reposistory 다 빼먹었다! 컨트롤러 빼고 완전 다 뺀것이다.. 꼭 기억할것
  • 레시피no를 시퀀스를이용하는데 이걸 어떻게 공유할수있나 고민했는데 강사님이 아주 쉬운 방법을 가르쳐주셨다 sequence_name.currval 로 입력하면 같은 시퀀스 번호가 유지된다는것
    • 분명히 오라클할때 배웠던거 같은데 정말 하나도 생각이 안난다! 이럴수가!
profile
hello world

0개의 댓글