[Spring Boot 게시판] 5일차

김정현·2022년 9월 29일
0

SPRINGBOOT게시판

목록 보기
5/36

1. 회원가입 후 생성된 회원에 대한 정보를 보여줌

1.MemberController

	@RequestMapping("usr/member/doJoin")
	@ResponseBody
	public Member doJoin(String loginId, String loginPw, String name, String nickname, String cellphoneNum,
			String email) {
		int id = memberService.doJoin(loginId, loginPw, name, nickname, cellphoneNum, email);
		Member member = memberService.getMemberById(id);
		return member;
	}
  • memberService에게 회원 insert를 요청, 회원이 DB에 저장되면
  • memberService로부터 마지막행의 id값을 얻고 id를 토대로 DB에서 회원정보를 얻어온다.

2.MemberService

	public int doJoin(String loginId, String loginPw, String name, String nickname, String cellphoneNum, String email) {
		memberRepository.doJoin(loginId, loginPw, name, nickname, cellphoneNum, email);
		int id = memberRepository.getLastInsertId();
		return id;
	}
  • memberSerivce.doJoin()을 실행하면 memberRepository.doJoin()를 실행하여 DB에 insert하고
  • memberRepository.getLastInsertId(); 마지막으로 추가된 행의 id를 리턴

3.MemberRepository.xml

	<select id="getLastInsertId" resultType ="int">
		SELECT LAST_INSERT_ID()
	</select>
	
	<select id="getMemberById" resultType ="com.kjh.exam.demo.vo.Member">
		SELECT * FROM `member` 
		WHERE id = #{id}
	</select>
  • MemberRepository interface와 MemberRepository.xml을 연동시켜놓았으므로 xml에 쿼리문을 추가
  • 마지막행의 id와 , id에 해당하는 회원정보를 가져오는 쿼리문을 작성

2. 로그인 아이디 중복 체크

1.MemberService

        public int doJoin(String loginId, String loginPw, String name, String nickname, String cellphoneNum, String email) {
                Member existsMember= getMemberByLoginId(loginId);
                if(existsMember !=null) {
                    return -1;
                }
                memberRepository.doJoin(loginId, loginPw, name, nickname, cellphoneNum, email);
                int id = memberRepository.getLastInsertId();
                return id;
            }
        private Member getMemberByLoginId(String loginId) {
                Member member = memberRepository.getMemberByLoginId(loginId);
                return member;
            }	
  • getMemberByLoginId(loginId) 메소드를 통해
  • DB에 insert하기전에 사용하려는 loginId를 가지고있는 회원이 있나 확인( existsMember )
  • 이미 아이디를 사용하고 있는 회원이 있다면 -1을 리턴
  • 없다면 insert한후 마지막행의 id를 리턴

2.MemberController

        public Object doJoin(String loginId, String loginPw, String name, String nickname, String cellphoneNum,
                    String email) {
                int id = memberService.doJoin(loginId, loginPw, name, nickname, cellphoneNum, email);

                if(id == -1) {
                    return "중복 되는 아이디가 있습니다.";
                }
                Member member = memberService.getMemberById(id);
                return member;
            }
  • memberService.doJoin()의 반환값이 -1인것을 아이디 중복을 의미

3.MemberRepostiory.xml

	<select id="getMemberByLoginId" resultType ="com.kjh.exam.demo.vo.Member">
		SELECT * FROM `member` 
		WHERE loginId = #{loginId}
	</select>
  • xml에 loginId를 토대로 회원데이터를 가져오는 쿼리문 추가

3. 회원가입시 입력된 데이터의 유효성 체크

MemberController

		if (loginId == null || loginId.trim().length() == 0) {
			return "아이디를 입력 해주세요.";
		}
		if (loginPw == null || loginPw.trim().length() == 0) {
			return "비밀번호를 입력 해주세요.";
		}
		if (name == null || name.trim().length() == 0) {
			return "이름을 입력 해주세요.";
		}
		if (nickname == null || nickname.trim().length() == 0) {
			return "닉네임을 입력 해주세요.";
		}
		if (cellphoneNum == null || cellphoneNum.trim().length() == 0) {
			return "전화번호를 입력 해주세요.";
		}
		if (email == null || email.trim().length() == 0) {
			return "이메일을 입력 해주세요.";
		}
  • doJoin() 메서드실행 하기이전에 전달받은 데이터들이 null값인지 공백인지 체크

4. 회원가입시 입력받은 데이터 유효성 체크를 메소드로 만듬

1. UsrMemberController

		if (Ut.empty(loginId)) {
			return "아이디를 입력 해주세요.";
		}
		if (Ut.empty(loginPw)) {
			return "비밀번호를 입력 해주세요.";
		}
  • 코드의 중복제거와 재활용을 위해 메소드를 사용
  • Ut.empty( ) 메서드로 데이터를 체크

2.Ut.class

public class Ut {
	public static boolean empty(Object obj) {
		if (obj == null) {
			return true;
		}
		if (obj instanceof String == false) {
			return true;
		}
		String str = (String) obj;
		return str.trim().length() == 0;
	}
  • obj가 null라면 true 즉, 비어있다
  • 인스턴스가 String이 아니라면 true를 반환
  • String이라면 공백제거후 길이가 0이라면 true 아니라면 false를 반환

5. 회원가입시 이름, 이메일 중복체크

  • 구글의 경우 아이디를 여러개 만들수있다. 하지만 email은 각각 다르다

1. MemberService

    public int doJoin(String loginId, String loginPw, String name, String nickname, String cellphoneNum, String email) {
            // 로그인아이디 중복체크
            Member existsMember = getMemberByLoginId(loginId);
            if (existsMember != null) {
                return -1;
            }
            // 이름과 이메일 중복체크
            existsMember = getMemberByNameAndEmail(name, email);
            if(existsMember !=null) {
                return -2;
            }
            memberRepository.doJoin(loginId, loginPw, name, nickname, cellphoneNum, email);
            int id = memberRepository.getLastInsertId();
            return id;
        }
  • MemberService.doJoin() 메소드는 int를 반환해야한다.
  • 가입이되면 가입된 회원번호를 반환
  • 아이디가 중복일경우 -1 반환
  • 같은이름과 같은이메일이라면 -2 를 반환

2. MemberController

		int id = memberService.doJoin(loginId, loginPw, name, nickname, cellphoneNum, email);
		if (id == -1) {
			return "중복 되는 아이디가 있습니다.";
		}
		if (id == -2) {
			return "이미 사용중인 이름과 이메일입니다.";
		}
  • id가 -2라면 같은 이름과 같은 이메일을 쓰고있는 회원이 있는것

3. MemberRepository.xml

        <select id="getMemberByNameAndEmail" resultType ="com.kjh.exam.demo.vo.Member">
            SELECT * FROM `member` 
            WHERE `name` = #{name} 
            AND email = #{email} 
        </select>
  • 입력받은 이름과 이메일을 사용하고있는 회원을 찾는 쿼리문

6. 문장 구성을 편하게 하기위해 Ut.f 함수 도입(format)

1. MemberController

		if (id == -1) {
			return Ut.f("이미 사용중인 아이디(%s)입니다", loginId);
		}
		if (id == -2) {
			return Ut.f("이미 사용중인 이름(%s)과 이메일(%s)입니다.",name,email);
		}
  • Ut.f() 메소드로 문장을 반환

2. Ut.f()

    public static String f(String format, Object... args) {
    return String.format(format, args);
    }
  • 매개변수로 Object... args는 Object타입의 변수를 여러 개 전달받기 위해 사용
  • 메소드에서 받은 매개변수는 배열로 사용한다.
  • 내부적으로 String.format을 이용
  • 위의 코드를 보면 매개변수 String 타입의 format은 "이미 사용중인 아이디(%s)입니다" 가 될것이고 args는 배열의 형태로 0번째 인덱스부터 대입이 된다.

0개의 댓글