- 어제 너무 피곤해서 구현한걸 블로그에 정리한다는걸 깜박했다
- 9월 16일 작성한것
- 레시피 컨트롤러 사진을 제외한 테이블 업데이트
- 서비스, 스토어, 매퍼에 해당 코드 입력
Controller
@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++) {
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);
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 로 입력하면 같은 시퀀스 번호가 유지된다는것
- 분명히 오라클할때 배웠던거 같은데 정말 하나도 생각이 안난다! 이럴수가!