느림보 개발

2. Spring MVC - 아이디 및 전화번호 중복체크 본문

코드 정리/Spring Framework

2. Spring MVC - 아이디 및 전화번호 중복체크

@르르 2023. 1. 10. 22:37
회원가입 페이지에서 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

Comments