왼쪽 : 기존 회원가입 폼 / 오른쪽 : 수정버전
css의 경우 https://bootswatch.com/ 이 사이트에서 테마를 정해서 썼는데, 처음 프로젝트를 할 때는 템플릿이 뭐가 유용하다는건지 너무 어려웠다.(모르니까 활용이 어려움. 정렬도 맘처럼 안됨,,)
근데 개인프로젝트, 팀프로젝트를 거치며 css와의 전쟁을 한바탕 치르고 나니 예전에 비해 속도도 빨라지고 템플릿 코드 이해가 되는게 뿌듯했다.
// 회원가입 작업 수행
@PostMapping (value = "join")
public String join(
@ModelAttribute MemberVO member,
@RequestParam String member_email1,
@RequestParam String member_email2, Model model) {
member.setMember_email(member_email1 + "@" + member_email2);
int insertCount = service.join(member);
int insertCount2 = service.join_address(member);
if(insertCount > 0 && insertCount2 > 0) {
return "member/joinSuccess";
} else {
model.addAttribute("msg", "가입 실패!");
return "fail_back";
}
}
<!-- 회원가입 작업 수행 -->
<insert id="insertMember">
<selectKey keyProperty="member_idx" resultType="integer" order="BEFORE">
SELECT IFNULL(MAX(member_idx),0) FROM member
</selectKey>
INSERT
INTO member
VALUES (
#{member_idx} + 1,
#{member_id},
#{member_passwd},
#{member_name},
#{member_gender},
#{member_email},
#{member_phone},
DATE_FORMAT(now(), '%y-%m-%d'), <!-- join_date(가입일)-->
'N' <!-- 이메일 인증 여부(기본값 'N')-->
)
</insert>
<!-- 회원가입 작업 수행 + 주소 -->
<insert id="insertAddress">
<selectKey keyProperty="address_idx" resultType="integer" order="BEFORE">
SELECT IFNULL(MAX(address_idx),0) FROM address
</selectKey>
INSERT
INTO address
VALUES (
#{address_idx} + 1,
#{member_idx} + 1,
#{address_zipcode},
#{address1},
#{address2}
)
</insert>
✍️Mybatis <selectKey>
기존 멤버의 가장 큰 member_idx를 조회하고 + 1 값을 새 member_idx로 설정 후 INSERT 해야함
=> insert 태그 내에서 <selectKey> 태그를 사용하여 SELECT 구문 실행하고, 조회된 결과값을 INSERT 구문에 반영 가능
<📝문법><insert> <selectKey keyProperty="값을 저장할 VO 객체 변수명" resultType="조회 결과 타입" order="실행 시점"> 실행할 SELECT 구문 </selectKey> </insert>
- keyProperty : 조회 데이터를 저장할 VO 객체의 실제 변수명(나중에 #{변수명} 으로 사용)
- resultType : SELECT 구문 실행 시 기대되는 조회결과(리턴값)의 타입
- order : 해당 SELECT 구문을 실행할 시점
- BEFORE 는 INSERT 구문 실행 전 SELECT 구문 실행
- AFTER 는 INSERT 구문 실행 후 SELECT 구문 실행
지금은 기본 INSERT 기능만 구현해뒀기 때문에 앞으로 추가해야 할 것들 (안까먹게 기록)