하.. 이 간단한 거 하는데에 2시간이 걸렸다. 뭐라해야되지.. 다른사람들은 나보다 잘하는것 같은데

나는 왜 더 빨리하지 못할까 라는 생각도 들고 만감이 교차한다. 내가 이분야에 천부적인 재능은 없을지언정,

나는 타고난 끈기로 실력의 격차를 줄여나가리다. 🔥 🔥 🔥


MemberMpp.xml
<insert id="insert">
		INSERT INTO infrMember (
		ifmmName
		,ifmmId
		,ifmmDelNy
		,ifmmPassword
		,ifmmPassword2
		,ifmmDob
		,ifmmGenderCd
		,regDateTime
		,ifmmEmailConsentNy
		,ifmmSmsConsentNy
		,ifmmPushConsentNy
		)
		VALUES (
		#{ifmmName}
		,#{ifmmId}
		,0
		,#{ifmmPassword}
		,#{ifmmPassword2}
		,#{ifmmDob}
		,#{ifmmGenderCd}
		,#{regDateTime}
		,#{ifmmEmailConsentNy}
		,#{ifmmSmsConsentNy}
		,#{ifmmPushConsentNy}
		)
		<selectKey resultType="String" keyProperty="ifmmSeq" order="AFTER">
		SELECT last_insert_id()
		</selectKey>
	</insert>

 

 

 

 

SQL에 생성해준 컬럼과 일치하도록 잘 확인한 후에 추가 시켜준다. 

MemberMpp.xml 파일은 가장 예민하다.

쿼리가 틀리면 모든것이 뒤틀릴수 있다.

 

 

 

 

	<select id="selectOne" resultMap="resultMapObj"> 
		SELECT
		a.ifmmSeq
		,a.ifmmName
		,a.ifmmId
		,a.ifmmDelNy
		,a.ifmmPassword
		,a.ifmmPassword2
		,a.ifmmDob
		,a.regDateTime
		,a.ifmmEmailConsentNy
		,a.ifmmSmsConsentNy 
		,a.ifmmPushConsentNy
		,b.ifmpNumber
		,b.ifmpTelecomCd
		,c.ifmeEmailFull
		,d.ifmaAddress1
		,d.ifmaAddress2
		,d.ifmaZipcode
		,f.ifnName
		,g.ifcdName
		FROM 
			infrMember a
		LEFT JOIN
				infrMemberPhone b ON a.ifmmSeq = b.ifmmSeq
		LEFT JOIN 
				infrMemberEmail c ON a.ifmmSeq = c.ifmmSeq
		LEFT JOIN 
				infrMemberAddress d ON a.ifmmSeq = d.ifmmSeq
		LEFT JOIN 
				infrMemberNationality e ON a.ifmmSeq = e.ifmmSeq
		LEFT JOIN 
				infrNationality f ON  e.ifmnSeq = f.ifnSeq
		LEFT JOIN 
				infrCode g ON g.ifcdSeq = a.ifmmGenderCd
		WHERE 
			1 = 1
		AND a.ifmmSeq = #{ifmmSeq}
	</select>

 

 

 

 

selectOne은 상세정보에 가져올 데이터 들을 말한다.

여기도 사진을 보면 데이터를 넣어주었다.

Insert는 단지 삽입해주기 때문에 DB에 데이터가 들어와도

보여주지 않으면 View단에서 데이터가 매핑되지 않는다.

 

 

 

MemberController.java
	@RequestMapping(value = "/member/memberInst")
	public String memberInst(Model model, Member dto, MemberVo vo, RedirectAttributes redirectAttributes) throws Exception {
		
		System.out.println("dto.getIfmmId(): " + dto.getIfmmId());
		System.out.println("dto.getIfmmName(): " + dto.getIfmmName());
		System.out.println("dto.getIfmmDob(): " + dto.getIfmmDob());
		System.out.println("dto.getIfmpNumber(): " + dto.getIfmpNumber());
		System.out.println("dto.getIfmpTelecomCd(): " + dto.getIfmpTelecomCd());
		System.out.println("dto.getIfmmPassword(): " + dto.getIfmmPassword());
		System.out.println("dto.getIfmmPassword2(): " + dto.getIfmmPassword2());
		System.out.println("dto.getIfmmGenderCd(): " + dto.getIfmmGenderCd());
		System.out.println("dto.getRegDateTime(): " + dto.getRegDateTime());
		System.out.println("dto.getIfmeEmailFull(): " + dto.getIfmeEmailFull());
		System.out.println("dto.getIfmaAddress1(): " + dto.getIfmaAddress1());
		System.out.println("dto.getIfmaAddress2(): " + dto.getIfmaAddress2());
		System.out.println("dto.getIfmaZipcode(): " + dto.getIfmaZipcode());
		System.out.println("dto.getIfmmEmailConsentNy(): " + dto.getIfmmEmailConsentNy());
		System.out.println("dto.getIfmmSmsConsentNy (): " + dto.getIfmmSmsConsentNy());
		System.out.println("dto.getIfmmPushConsentNy(): " + dto.getIfmmPushConsentNy());

		// 입력을 작동시킨다.
		int result = service.insert(dto);
		
		System.out.println("result: " + result);
		
		vo.setIfmmSeq(dto.getIfmmSeq());
		/* redirectAttributes.addFlashAttribute("dto", dto); */
		
		redirectAttributes.addFlashAttribute("vo", vo);
		
		return "redirect:/member/memberView";
	}

 

 

 

위에 
System.out.println("dto.getIfmmId(): " + dto.getIfmmId());

이와같은 코드를 적은이유는 Insert가 제대로 데이터가 넘어오는가를 알기위해서

적은 것이다. 예를들어 다리를 검문할 때 중간 중간 관리인이 서있는것처럼

내가 어느부분에서 실수 했는지 바로 알 수 있다.

 

 

 

 

 

 

 

vo.setIfmmSeq(dto.getIfmmSeq()); 는 우리의 데이터는 아까 member.java에 넣은것처럼 dto에 다 저장되어있다.

하지만 데이터를 꺼내올때는 vo를 통해서 꺼내와야되는

우리는 vo에 다 일일히 적어줄수 없으니 

 

vo.setIfmmSeq() 안에서 dto.getIfmmSeq() 를  실행시켜주면

vo에서 dto값을 불러오는 착시현상같지만 역발상적인 효과를 볼수가 있다.

redirectAttributes.addFlashAttribute("vo", vo); 다음 코드는

vo값을 모두 불러오라는 Post방식의 코드이다.  

 

정리하자면 우리는 dto에 데이터를 다 저장햇지만 dto를 사용할 수 없어 vo를 빌려서  dto를 모두 출력하게

하는것이라고 생각하면 되겠다.

 

 

memberForm.jsp
				<input type="radio" id="ifmmEmailConsentNy" name="ifmmEmailConsentNy" value="35">&nbspEmail 
				<input type="radio" id="ifmmSmsConsentNy " name="ifmmSmsConsentNy " value="36">&nbspSns
				<input type="radio" id="ifmmPushConsentNy" name="ifmmPushConsentNy" value="37">&nbspPush
				</td>

 

 

 

input에다가 id와 name을 넣어준 이유는 Insert한 데이터가 다음과 같은 방식으로

매핑을 시키기 때문이다. value를 준이유는 코드성 데이터들 이기 때문이다.

나의 코드성 데이터에는 35 , 36 , 37 에 Email, sns, push가 들어있다.

 

 

 

 

 

 

memberView.jsp
<c:choose>
					<c:when test="${rt.ifmmEmailConsentNy eq '35'}">
				<input type="radio" id="ifmmEmailConsentNy" name="ifmmEmailConsentNy" <c:out value="${rt.ifmmEmailConsentNy}"/> checked disabled>&nbspEmail 
				<input type="radio" id="ifmmSmsConsentNy " name="ifmmSmsConsentNy " <c:out value="${rt.ifmmSmsConsentNy}"/>   disabled>&nbspSns
				<input type="radio" id="ifmmPushConsentNy" name="ifmmPushConsentNy" <c:out value="${rt.ifmmPushConsentNy}"/>  disabled>&nbspPush
					</c:when>
					<c:when test="${rt.ifmmSmsConsentNy eq '36'}">
				<input type="radio" id="ifmmEmailConsentNy" name="ifmmEmailConsentNy" <c:out value="${rt.ifmmEmailConsentNy}"/>  disabled>&nbspEmail 
				<input type="radio" id="ifmmSmsConsentNy " name="ifmmSmsConsentNy " <c:out value="${rt.ifmmSmsConsentNy}"/>  checked disabled>&nbspSns
				<input type="radio" id="ifmmPushConsentNy" name="ifmmPushConsentNy" <c:out value="${rt.ifmmPushConsentNy}"/>  disabled>&nbspPush
					</c:when>
					<c:when test="${rt.ifmmSmsConsentNy eq '37'}">
				<input type="radio" id="ifmmEmailConsentNy" name="ifmmEmailConsentNy" <c:out value="${rt.ifmmEmailConsentNy}"/>  disabled>&nbspEmail 
				<input type="radio" id="ifmmSmsConsentNy " name="ifmmSmsConsentNy " <c:out value="${rt.ifmmSmsConsentNy}"/>   disabled>&nbspSns
				<input type="radio" id="ifmmPushConsentNy" name="ifmmPushConsentNy" <c:out value="${rt.ifmmPushConsentNy}"/> checked disabled>&nbspPush
					</c:when>
			<%-- 	<input type="radio" id="ifmmEmailConsentNy" name="ifmmEmailConsentNy"value="<c:out value="${rt.ifmmEmailConsentNy}"/>" disabled>&nbspEmail 
				<input type="radio" id="ifmmSmsConsentNy " name="ifmmSmsConsentNy " value="<c:out value="${rt.ifmmSmsConsentNy}"/>" checked disabled>&nbspSns
				<input type="radio" id="ifmmPushConsentNy" name="ifmmPushConsentNy" value="<c:out value="${rt.ifmmPushConsentNy}"/>" disabled>&nbspPush --%>
				</c:choose>

 

 

다음을 보면 c:when 의 쓰임과 c:choose의 쓰임을 알수 있다.

c:choose는 else if 의 느낌 다중가정이 가능하고

c:if는 단일가정만 가능하다.

 

그러니까 c:choose가 만능 문장이라고 보면되겠다.

 

다음코드들을 간략하게 설명해주자면

 

<c:when test="${rt.ifmmEmailConsentNy eq '35'}">
				<input type="radio" id="ifmmEmailConsentNy" name="ifmmEmailConsentNy" <c:out value="${rt.ifmmEmailConsentNy}"/> checked disabled>&nbspEmail 
				<input type="radio" id="ifmmSmsConsentNy " name="ifmmSmsConsentNy " <c:out value="${rt.ifmmSmsConsentNy}"/>   disabled>&nbspSns
				<input type="radio" id="ifmmPushConsentNy" name="ifmmPushConsentNy" <c:out value="${rt.ifmmPushConsentNy}"/>  disabled>&nbspPush
					</c:when>

 

 

 

 

rt.ifmmEmailConsetNy를 출력할건데 그 값이 35랑 같으면

radio데이트에있는 email 과 관련된 라디오박스를 checked하고 disabled하라

라는 의미이다.

 

 

결과값

 

출력하면 다음과같이 나온다.

 

 

 

 

 


 

 

To be continue..

 

복사했습니다!