본문 바로가기
Project/Project(프로젝트) Library

아이디 중복 및 비밀번호 체크

by Son 2023. 5. 11.

1.AccountService클래스를 만든다

 

 

 

Repository를 생성하고 @Mapper를 달아주고 난후 return은 UserDto(만일 id가 중복이라면)로 해두고 매개변수는  String username (우리가 입력한 아이디 값)

 

 

 

 

 

Mybatis를 사용하기 위해서 Mybatis홈페이지로 가서 mapper를 복사붙여넣기 한다

 

붙여넣기

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.korit.library.repository.AccountRepository">

</mapper>

 

 

public void compareToPassword(String password, String repassword) {
        if(!password.equals(repassword)){
            Map<String, String> errorMap = new HashMap<>();
            errorMap.put("repassword", "비밀번호가 일치하지 않습니다.");

            throw new CustomValidationException(errorMap);
        }
    }

매개변수로 두 password를 입력받고

만일 두 password가 다르다면

Map를 만들어서 put을 해주고 CustomValidationException(errorMap);으로 에러를 예외로 넘겨준다

 

<resultMap id="userMst" type="com.korit.library.entity.UserMst">
        <result property="userId" column="user_id"></result>
        <result property="username" column="username"></result>
        <result property="password" column="password"></result>
        <result property="name" column="name"></result>
        <result property="email" column="email"></result>
        <result property="provider" column="provider"></result>
        <result property="createDate" column="create_date"></result>
        <result property="updateDate" column="update_date"></result>
        <collection property="roleDtl" javaType="list" resultMap="roleDtl"></collection>
    </resultMap>

    <resultMap id="roleDtl" type="com.korit.library.entity.RoleDtl">
        <result property="roleDtlId" column="role_dtl_id"></result>
        <result property="userId" column="user_id"></result>
        <result property="roleId" column="role_id"></result>
        <result property="createDate" column="create_date"></result>
        <result property="updateDate" column="update_date"></result>
        <collection property="roleMst" resultMap="roleMst"></collection>
    </resultMap>

    <resultMap id="roleMst" type="com.korit.library.entity.RoleMst">
        <result property="roleId" column="role_id"></result>
        <result property="roleName" column="role_name"></result>
        <result property="createDate" column="create_date"></result>
        <result property="updateDate" column="update_date"></result>
    </resultMap>

 

 

 <select id="findUserByUsername" parameterType="String" resultMap="userMst">
        select
            um.user_id,
            um.username,
            um.password,
            um.name,
            um.email,
            um.provider,

            rd.role_id,
            rm.role_name,

            um.create_date,
            um.update_date
        from
            user_mst um
            left outer join role_dtl rd on(rd.user_id = um.user_id)
            left outer join role_mst rm on(rm.role_id = rd.role_id)
        where
            um.username = #{username}
    </select>

 

resultMap="userMst"로 한 이유는 회원정보 회원의 권한을 각각 서로다른 테이블로 놔두었고 그 테이블을 join으로 합처야 하기 때문에 Map으로 reurn할것이다

 

아이디를 입력받고 DB로 보낸후에 해당 유저가 있다면 그 유저의 회원정보와 회원의 권한을 return 해주려 함으로 usermst role_dtl role_mst를 join을 시켜 입력받은 아이디가 기존의 회원에 있다면 그 기존의 회원이 가지고 정보와 기존회원의 아이디와 권한 테이블의 권한아이디를 비교하여 같은것이 있다면 해당 쿼리를 가져와서 join시킨후 select해준다

 

    <resultMap id="userMst" type="com.korit.library.entity.UserMst">
        <result property="userId" column="user_id"></result>
        <result property="username" column="username"></result>
        <result property="password" column="password"></result>
        <result property="name" column="name"></result>
        <result property="email" column="email"></result>
        <result property="provider" column="provider"></result>
        <result property="createDate" column="create_date"></result>
        <result property="updateDate" column="update_date"></result>
        <collection property="roleDtl" javaType="list" resultMap="roleDtl"></collection>
    </resultMap>

    <resultMap id="roleDtl" type="com.korit.library.entity.RoleDtl">
        <result property="roleDtlId" column="role_dtl_id"></result>
        <result property="userId" column="user_id"></result>
        <result property="roleId" column="role_id"></result>
        <result property="createDate" column="create_date"></result>
        <result property="updateDate" column="update_date"></result>
        <collection property="roleMst" resultMap="roleMst"></collection>
    </resultMap>

    <resultMap id="roleMst" type="com.korit.library.entity.RoleMst">
        <result property="roleId" column="role_id"></result>
        <result property="roleName" column="role_name"></result>
        <result property="createDate" column="create_date"></result>
        <result property="updateDate" column="update_date"></result>
    </resultMap>

 property= "" " "안에 들어가는 것은 UserMst RoleDtl RoleMst의 변수명이 들어간다

 

column안에는 

   select
            um.user_id,
            um.username,
            um.password,
            um.name,
            um.email,
            um.provider,

            rd.role_id,
            rm.role_name,

            um.create_date,
            um.update_date

select 로 가져온 db column명을 사용한다

 

즉 Map column으로 해당 DB의 값을 들고와서 property로 해당 클래스의 변수에 값을 전달한다

 

property변수명 column

select에서 가져온 column명

'Project > Project(프로젝트) Library' 카테고리의 다른 글

책 이미지 등록  (0) 2023.05.14
deletebook  (0) 2023.05.11
회원가입 에러메시지  (0) 2023.05.10
회원가입 register js  (0) 2023.05.03
회원가입 @valid AOP  (0) 2023.05.02