스프링3

오가람·2023년 4월 25일

시작하기전 DB세팅

SELECT * FROM "MEMBER"
WHERE 1 = 0

-- MEMBER 테이블을 복제해서 MEMBER_S 테이블 생성

-- 테이블 컬럼 복제(NOT NULL 제약조건만 복제됨)
CREATE TABLE MEMBER_S
AS SELECT * FROM "MEMBER"
WHERE 1 = 0

-- 컬럼 기본값 지정
ALTER TABLE MEMBER_S
MODIFY ENROLL_DT DEFAULT SYSDATE

ALTER TABLE MEMBER_S
MODIFY SECESSION_FL DEFAULT 'N'

-- PK 제약조건 추가
ALTER TABLE MEMBER_S
ADD CONSTRAINT MEMBER_S_PK PRIMARY KEY(MEMBER_NO)

ALTER TABLE MEMBER_S
ADD CONSTRAINT MEMBER_S_CHK CHECK(SECESSION_FL IN ('Y', 'N'))

-- 시퀀스 생성
CREATE SEQUENCE SEQ_MEMBER_NO_S NOCACHE

-- 샘플데이터 추가
INSERT INTO MEMBER_S VALUES(
	SEQ_MEMBER_NO_S.NEXTVAL,
	'test01@naver.com',
	'pass01!',
	'오가람',
	'01012341234',
	DEFAULT, DEFAULT, DEFAULT, DEFAULT
)

COMMIT
<!-- 
    	조회되는 행의 개수 : 1행
    	파라미터 타입 : edu.kh.comm.member.model.vo.Member
    	조회되는 타입 : java.lang.String -> string
    	
    	파라미터로 VO가 전달된 경우
    	1) 패키지명 + 클래스명을 모두 작성해야 한다.
    	2) mapper에서 VO에 저장된 값을 얻어와 사용할 경우 #{필드명}을 사용한다.
    		단, VO에 반드시 Getter가 작성되어 있어야 한다.
     -->
    
    
    <select id="test3" parameterType="edu.kh.comm.member.model.vo.Member" resultType="string">
    	SELECT MEMBER_TEL FROM MEMBER_S
		WHERE MEMBER_EMAIL = #{memberEmail}
		AND MEMBER_PW = #{memberPw}
		AND SECESSION_FL = 'N'
    </select>
    
mybatis-config에서 작성후
<!-- 별칭 작성 부분 -->
	<!-- VO클래스의 패키지명 + 클래스명 모두 작성하는것이 불편하기 때문에 짧은 별칭 부여 -->
	<typeAliases>
		<typeAlias type="edu.kh.comm.member.model.vo.Member" alias="member"/>
	</typeAliases>

위에 파라미터 타입을 member로 간단하게 작성할수 있다

  • resultType에 VO를 작성하는 경우 *
    - VO의 필드명과 조회되는 컬럼명이 일치하면
    자동으로 VO객체에 값이 세팅된다. -> 하지만 java와 DB의 표기법 차이로 인해서
    위 특징이 적용되는 경우가 많지 않다....ㅠ.ㅠ.. 그래서 필드명, 컬럼명이 달라도 이를 연결시켜줄 수 있는
    태그를 제공함! memberNo - MEMBER_NO
    resultMap="member_rm" -> 조회 결과를 member_rm을 이용하여 비교해서 VO에 세팅
    -->
 <!-- resultMap 태그
    	
    	- SELECT 조회 결과(ResultSet)의 컬럼과
    	조회 결과를 옮겨 담을 VO의 필드명이 일치하지 않을 때
    	이를 매핑시켜 조회결과가 필드에 세팅되게 하는 역할
    
    	[resultMap 속성]
    	1) type : 조회 결과를 담을 VO의 타입 또는 별칭
    	2) id	: 만들어진 resultMap 태그를 지칭할 이름(식별명)
    	
    	[resultMap 내부 작성 태그]
    	<id>	: PK 역할의 컬럼 - 필드 연결
    	<result>: PK을 제외한 나머지 컬럼 - 필드 연결
    
    
     -->
    
    <resultMap type="member" id="member_rm">
    
    	
		<id property="memberNo" column="MEMBER_NO"/>
		
		<result property="memberEmail" 		column="MEMBER_EMAIL"/>
		<result property="memberPw" 		column="MEMBER_PW"/>
		<result property="memberNickname" 	column="MEMBER_NICK"/>
		<result property="memberTel" 		column="MEMBER_TEL"/>
		<result property="memberAddress" 	column="MEMBER_ADDR"/>
		<result property="profileImage" 	column="PROFILE_IMG"/>
		<result property="enrollDate" 		column="ENROLL_DT"/>
		<result property="secessionFlag" 	column="SECESSION_FL"/>
    
    </resultMap>
    
// 로그아웃
	@GetMapping("/logout")
	public String logout(SessionStatus status) {
		// 로그아웃 == 세션을 없애는 것
		
		// * @SessionAttributes을 이용해서 session scope에 배치된 데이터는
		// SessionStatus라는 별도 객체를 이용해야만 없앨 수 있다.
		
		logger.info("로그아웃 수행됨");
		
		//session.invalidate(); 기존 세션 무효화 방식 X
	
		status.setComplete(); // 세션이 할 일이 완료됨 -> 없앰
		
		
		return "redirect:/"; // 메인페이지 재요청
	}
	

		// 커맨드 객체
		// @modelAttribute 생략된 상태에서 파라미터가 필드에 세팅된 객체
		
		
		
		
		logger.info("로그인 기능 수행됨");
		
		// 아이디, 비밀번호가 일치하는 회원 정보를 조회하는 Service 호출 후 결과 반환 받기
		Member loginMember = service.login(inputMember);
		
		/* Model : 데이터를 맵 형식(K:V) 형태로 담아 전달하는 용도의 객체
		 * -> request, session을 대체하는 객체
		 * 
		 * - 기본 scope : request
		 * - session scope로 변환하고 싶은 경우
		 * 클래스 레벨로 @SessionAttributes를 작성하면 된다.
		 * 
		 * @SessionAttributes 미작성 -> request scope
		 * 
		 * */
profile
개발자준비생

0개의 댓글