로그인을 구현하는데
컨트롤러 -> 서비스 -> mybatis 순으로 진행되는 거였다
컨트롤러
/* 로그인 페이지 */
@RequestMapping("/LoginPage")
public ModelAndView loginPage(){
ModelAndView mav = new ModelAndView("member/login");
return mav;
}
/* 로그인 */
@PostMapping("/LoginAction")
public ModelAndView loginAction(TestMemVO memVO){
ModelAndView mav = new ModelAndView("member/login-success");
System.out.println(memVO);
TestMemVO rtnVO = testService.loginAction(memVO);
return mav;
}
서비스
// 로그인
public TestMemVO loginAction(TestMemVO memVO) {
System.out.println("service " + memVO.getMemId() + memVO.getMemPw());
TestMemVO rtnVO = new TestMemVO();
try {
if(memVO.getMemId()!= null && memVO.getMemPw() != null) {
System.out.println("try문 실행됨!");
rtnVO = hackTestSlave.login(memVO.getMemId(), memVO.getMemPw());
System.out.println("rtnVO" + rtnVO);
if(rtnVO == null)
System.out.println("회원 정보가 없습니다");
} else{
System.out.println("정보가 제대로 입력되지 않았습니다");
}
} catch (Exception e) {
throw new RuntimeException(e);
}
return rtnVO;
}
mybatis
@Select("SELECT * FROM oj_test.member_table WHERE mem_id = #{memId} AND mem_pw = #{memPw}")
TestMemVO login(String memID, String memPw);
그런데 이런 오류가 떴다
Parameter 'memId' not found. Available parameters are [memPw, param1, memID, param2]
memId를 못찾겠다니
어디서부터 전달이 안된건가 해서 찾아봤더니
서비스단까지 잘 갔고
try문도 정상적으로 실행됐는데
mybatis로 넘어갈때가 문제였다
도저히 모르겠어서 구글에 검색해 본 결과
mybatis의 파라미터가 2개 이상 넘어가면 따로 지정을 해줘야한다는 것이였다
여러 방법이 있었지만
나는 @Param annotation을 이용하기로 했다.
@Select("SELECT * FROM oj_test.member_table WHERE mem_id = #{memId} AND mem_pw = #{memPw}")
TestMemVO login(@Param("memId") String memId, @Param("memPw")String memPw);
mybatis의 파라미터부분만 수정하면 됐다
수정 후 실행해보니 잘 되는 것을 확인할 수 있었다
@Param에 대해 더 공부해봐야겠다.
참고