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 |