느림보 개발
2. Spring MVC - 아이디 및 전화번호 중복체크 본문
회원가입 페이지에서 Ajax 호출하여 처리
- 아이디 체크하면 Ajax가 실행되도록 설정
- url, type, dataType, data 를 설정
- Ajax를 통해 가져온 데이터가 1일 경우 사용 불가능, 가져온 데이터가 0일 경우 사용 가능으로 기능에 맞게 처리
- 가져온 결과가 1일 경우, id=user_id2에 1세팅 → form submit시 1일 경우 submit 못하게 제어!
- 가져온 결과가 0일 경우 id-user_id2에 0세팅
$(document).ready(function() {
//아이디 중복체크
$('.idCheck').click(function() {
//alert($("#user_id").val());
$.ajax({
url : "/member/idCheck",
type : "post",
dataType : "json",
data : {
"user_id" : $("#user_id").val()
},
success : function(data) {
//alert(data);
if (data == 1) {
$('#user_id2').val(1);
alert("사용 불가능한 이메일입니다.");
} else if (data == 0) {
$('#user_id2').val(0);
alert("사용 가능한 이메일입니다.");
}
}
});
});
});
<label for="email_address">이메일(Email Address) *</label>
<input type="email" name="user_id" class="form-control" id="user_id" value="">
<input type="hidden" id="user_id2"><br>
Controller
// 아이디 중복 체크
@ResponseBody
@RequestMapping(value = "/idCheck", method = RequestMethod.POST)
public String idCheck(MemberVO vo) throws Exception {
String result = service.idCheck(vo)+"";
return result;
}
// 전화번호 중복 체크
@ResponseBody
@RequestMapping(value="/phoneCheck", method = RequestMethod.POST)
public String phoneCheck(MemberVO vo) throws Excpetion {
String result = service.phoneCheck(vo)+"";
return result;
}
MemberService, Impl
- 인터페이스로 서비스 로직의 틀을 짠다.
// 아이디 중복 체크
public int idCheck(MemberVO vo) throws Exception;
//휴대번호 중복체크
public int phoneCheck(MemberVO vo) throws Exception;
- 인터페이스 MemberService에서 받은 서비스 로직을 구체적으로 구현한다.
//아이디 중복 체크
@Override
public int idCheck(MemberVO vo) throws Exception {
return dao.idCheck(vo);
}
//휴대번호 중복 체크
@Override
public int phoneCheck(MemberVO vo) throws Exception {
return dao.phoneCheck(vo);
}
MemberDAO, Impl
- 인터페이스로 데이터베이스에서 실행할 로직의 틀을 짠다.
//아이디 중복 체크
public int idCheck(MemberVO vo) throws Exception;
//휴대번호 중복 체크
public int phoneCheck(MemberVO vo) throws Exception;
- 클래스에 인터페이스를 구현하여 구체화한다.
// 아이디 중복 체크
@Override
public int idCheck(MemberVO vo) throws Exception {
return sqlSession.selectOne(NAMESPACE+".idCheck", vo);
}
//휴대번호 중복 체크
@Override
public int phoneCheck(MemberVO vo) throws Exception {
return sqlSession.selectOne(NAMESPACE+".phoneCheck", vo);
}
MemberMapper
- #{ } 사용시 PreparedStatement 가 생성되고 이 객체를 통해 매개 변수의 값을 안전하게 설정할 수 있다.
- PreparedStatement가 제공하는 set계열의 메서드를 사용하여 ?를 대체할 값을 지정한다.
- resultType은 int 정수형으로 설정하는데, select 구문을 날리는데 왜 정수형 데이터로 데이터를 받을까? 찾아봤더니, SQL 실행시 구문 처리후 데이터베이스에 반영된 row수를 리턴한다. 실제로 확인해보니 1row가 반영되었다고 뜬다.
- 그래서 insert는 삽입된 행의 개수를 반환, update는 수정에 성공한 행의 개수 반환(실패시 0 반환), delete의 경우는 삭제한 행의 개수를 반환한다고 한다.
- 이를 중복체크 로직에 적용해보면 사용자가 아이디를 입력했을 때 그 아이디를 받아와 select 를 남기면 데이터가 있을 경우 1을 반환, 없을 경우 0을 반환하게 되는데 이에 따른 로직처리를 해주면 된다.
<!-- 아이디 중복 체크 -->
<select id="idCheck" resultType="int">
select count(*) from mfg_member
where user_id =#{user_id}
</select>
<!-- 전화번호 중복 체크 -->
<select id="phoneCheck" resultType="int">
select count(*) from mfg_member
where user_phone =#{user_phone}
</select>
참고
PreparedStatement https://java119.tistory.com/39
'코드 정리 > Spring Framework' 카테고리의 다른 글
6. SpringMVC - Ajax 통신을 통해 아이디 중복 체크 하기 (1) | 2023.01.17 |
---|---|
5. SpringMVC - 찜하기 (2) | 2023.01.13 |
4. Spring MVC - 주변 시설 찾기 (0) | 2023.01.11 |
3. Spring MVC - 카카오 우편서비스 API 사용 (0) | 2023.01.11 |
1. Spring MVC - 회원가입 (0) | 2023.01.09 |