UserMapper.xml생성
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="user">
<select id="userId" resultType="String" parameterType="String">
SELECT name
FROM user
WHERE user_id =#{user_id}
</select>
</mapper>
UserDAO생성
package com.demo.dao;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository
public class UserDAO {
@Autowired
private SqlSessionTemplate sqlTemplate;
public String cheakUserID(String user_id) {
return sqlTemplate.selectOne("user.userIdExist", user_id) ;
}
}
UserService생성
package com.demo.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.demo.dao.UserDAO;
@Service
public class UserService {
@Autowired
private UserDAO userDAO;
public boolean checkuserIdExist(String user_id) {
String user_name = userDAO.cheakUserID(user_id);
if (user_name == null) {
return true;
} else {
return false;
}
}
}
테스트를 위해 MySQL 유저 데이터 하나 넣음
insert into user(name, user_id, user_pw)
value ('홍길동','hong',1234);
RestApiController 생성 후
package com.demo.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import com.demo.service.UserService;
//RestContoller는 화면을 표시하지 않고 바로 데이터를 전송한다.
@RestController
public class RestApiController {
@Autowired
private UserService userService;
@GetMapping("/user/check/{user_id}")
public String checkUserIdExist(@PathVariable String user_id) {
//유저 아이디가 없으면 true 있으면 false
boolean check = userService.checkuserIdExist(user_id);
return check +"";
}
}
데이터베이스에 없는 데이터를 입력했을 경우 true 출력
데이터베이스에 있는 데이터를 입력했을 경우 false출력
restcontroller는 데이터만 전송됨
현제 데이터는 check 참인지 거짓인지만 리턴해줌
주소 변수가 들어감 @pathVariable 로 받음 String user_id 값이 들어간다
주소에서 받은 값으로 아이디가 있는 지 없는지 검사
UserVO
@AssertTrue(message = "아이디 중복체크 해주세요")
private boolean userIdChecked;
public UserVO() {
this.userIdChecked = false;
}
public boolean isUserIdChecked() {
return userIdChecked;
}
public void setUserIdChecked(boolean userIdChecked) {
this.userIdChecked = userIdChecked;
}
AssertTrue :참이 아니면 에러임
유저 vo가 생성 시에 초기 값을 false로 줌 -> 바꿔주지 않으면 false임
getset메소드 생성
join.jsp
중복확인 버튼에 onclick 으로 checkId() 함수 실행하도록 함
<div class="form-group">
<form:label path="user_id">아이디</form:label>
<div class="input-group">
<form:input path="user_id" onkeypress="resetUserIdExist()" class="form-control" />
<div class="input-group-append">
<button type="button" onclick="checkId()" class="btn btn-primary">중복확인</button>
</div>
</div>
<form:errors path="user_id" />
</div>
<div class="form-group" id="idCheck">
<form:hidden path="userIdChecked"/>
<form:errors path="userIdChecked" />
</div>
userId 체크하는 폼 (히든임)
join.jsp 하단에 자바스크립트 추가함
checkId() 함수
<!-- 하단 메뉴 부분 -->
<c:import url="/WEB-INF/views/include/footer.jsp" />
<!-- 자바 스크립트 -->
<script type="text/javascript">
function checkId(){
const user_id = $("#user_id").val()//제이쿼리로 입력된 유저 아이디를 저장
if(user_id.length == 0){
alert('아이디를 입력해주세요')
return
}
// 제이쿼리의 ajax문법
$.ajax({
url : '${root}/user/check/' + user_id,
type : 'get',
dataType : 'text',
success : function(result){
if(result.trim() == 'true'){
alert('사용할 수 있는 아이디입니다')
$("#userIdChecked").val('true');//아이디 중복 체크 완료
$("#idCheck span").text('');//에러 초기화
} else {
alert('사용할 수 없는 아이디 입니다')
$("#userIdChecked").val('false');//아이디 중복 체크 완료
}
}
})
}
function resetUserIdExist(){
$("#checkId").val('false')
}
</script>
userMapper.xml
<insert id="newUser" parameterType="com.demo.domain.UserVO">
INSERT INTO user(name , user_id, user_pw)
VALUSES(#{name},#{user_id},#{user_pw})
</insert>
userDAO
//회원가입 -유저 추가
public void addUser(UserVO joinUser) {
sqlTemplate.insert("user.newUser");
}
UserService
//회원가입 - 유저 추가
public void addUser(UserVO joinUser) {
userDAO.addUser(joinUser);
}
UserController- DB에 새 유저 저장 추가
@Autowired
private UserService uService;
@PostMapping("/join_pro")
public String join_pro(@Valid @ModelAttribute("joinUser") UserVO joinUser,
BindingResult result , Model model) {
if(result.hasErrors()) {
return "user/join";
}
if(!joinUser.getUser_pw().equals(joinUser.getUser_pw2())) {
model.addAttribute("msg", "비밀번호가 같지 않습니다.!");
return "user/join";
}
//DB에 새 유저를 저장
uService.addUser(joinUser);
return "user/join_success";
}
'BACKEND > Spring' 카테고리의 다른 글
게시판 만들기 2 - 상단 화면에 로그인/로그아웃 표시 (0) | 2023.10.30 |
---|---|
게시판 만들기 2 - 로그인 처리 (0) | 2023.10.30 |
게시판 만들기 2 - 유효성 검사 (0) | 2023.10.27 |
게시판 만들기 2- VO생성 및 MyBatis 설정 , 인터셉터 설정 (0) | 2023.10.26 |
게시판 만들기 2 - 테이블 만들기(DB) (0) | 2023.10.26 |