본문 바로가기
CLASS/SPRINGBOOT

#8-2 / JPA 4 - 회원가입 modify , update

by hingu 2024. 8. 23.

  👀 modify 페이지 출력 - selectOne 

- controller

@Autowired
web_repo wr; //interface load

//회원 정보 수정 JPA
@PostMapping("/checkout/member_modify")
public String member_modify(int uidx, Model m, ServletResponse res) {
    res.setContentType("text/html;charset=utf-8");
    try {
        List<jpa_dao> oneData= wr.findByUidx(uidx);
        if(oneData.get(0)==null) {
            System.out.println("해당 데이터가 없습니다.");
        }else {
            m.addAttribute("oneData", oneData);							
        }
    } catch (Exception e) {
        e.getStackTrace();
    }
    return "/checkout/member_modify.html";
}

 

 

- /checkout/member_modify.html

<!-- 불필요한 코드는 생략 -->

<body class="bg-light">
	<form id="frm" class="needs-validation">
		<input type="hidden" name="uidx" th:value="${oneData.get(0).uidx}">
		<div class="container">
			<div class="py-5 text-center">
				<h2>회원 수정</h2>
				<p class="lead">회원 수정 샘플 페이지</p>
			</div>
			<div class="order-md-0">
				<h4 class="mb-3">MEMBER-MODIFY</h4>
				<div class="row">
					<div class="col-md-6 mb-3">
						<label for="firstName">고객명</label>
						<!-- Controller에서 html로 value 적용시 th:value 속성 이용 -->
						<input type="text" class="form-control" id="mname" name="uname"
							th:value="${oneData.get(0).uname}" readonly="readonly">
					</div>
					<div class="col-md-6 mb-3">
						<label for="lastName">아이디</label> <input type="text"
							class="form-control" id="mid" name="uid"
							style="margin-right: 5px" th:value="${oneData.get(0).uid}"
							readonly="readonly">
					</div>
				</div>
				<div class="row">
					<div class="col-md-6 mb-3">
						<label for="firstName">신규 패스워드</label> <input type="password"
							class="form-control" id="mpass" name="upass"
							placeholder="패스워드를 입력하세요.">
					</div>
					<div class="col-md-6 mb-3">
						<label for="lastName">신규 패스워드 확인</label> <input type="password"
							class="form-control" id="mpass2" placeholder="동일한 패스워드를 입력하세요.">
					</div>
				</div>

				<div class="mb-3">
					<label for="username">연락처</label> <input type="text"
						class="form-control" style="margin-right: 5px" id="mtel"
						name="utel" th:value="${oneData.get(0).utel}" required>
				</div>

				<div class="mb-3">
					<label for="email">이메일</label> <input type="email"
						class="form-control" id="email" name="uemail"
						th:value="${oneData.get(0).uemail}" required="required">
				</div>

				<div class="mb-3">
					<label for="address">주소</label>
					<div class=" input-group input-group-prepend">
						<input type="text" class="form-control" style="margin-right: 5px"
							id="post" name="upost" th:value="${oneData.get(0).upost}"
							readonly>
						<button class="btn btn-secondary" type="button"
							onclick="sample2_execDaumPostcode()">주소 찾기</button>
					</div>
					<input type="text" class="form-control" style="margin-top: 5px"
						id="address" name="uaddr1" th:value="${oneData.get(0).uaddr1}"
						readonly> <input type="text" class="form-control"
						style="margin-top: 5px" id="address_detail" name="uaddr2"
						th:value="${oneData.get(0).uaddr2}" required>
				</div>

				<div class="mb-3">
					<label for="address2">프로필 이미지 <span class="text-muted">(선택)</span></label><br>
					<em th:if="${oneData.get(0).uimg == null}"> <input type="file"
						id="file" name="files" placeholder="대표 이미지">
					</em>
				</div>

			</div>
            
			<hr class="mb-4">
			<button class="btn btn-primary btn-lg btn-block" type="button"
				onclick="member_modifyok()">회원 정보 수정</button>
		</div>
	</form>
</body>

 

 

- web_repo.java (interface)  추가

public interface web_repo extends JpaRepository<jpa_dao, Integer>{
	@Query("select now()")
	String mysql_times();
	
    //요거 추가함
	List<jpa_dao> findByUidx(int uidx);//한 개의 정보만 출력
}

 

  👀 modify - 개인정보 수정  update

🤷‍♂️❓

findById : primary key(@Id를 의미) => select * from member_ship where uidx=?;

orElse : select 시 값이 없을 경우 null로 반환하는 return 메소드(findById에서만 사용 가능)

 

 

- Controller

//회원 정보 수정 update
//post 전용, produces 언어셋(JSON, XML, HTML(Thymeleaf) 한글 깨질 경우, script(X))
@RequestMapping(value="/checkout/member_modifyok", method=RequestMethod.POST, produces="text/html; charset=utf-8")
public String member_modifyok(@ModelAttribute jpa_dao jds, ServletResponse res) {
    res.setContentType("text/html; charset=utf-8");
    try {
        //findById : primary key(@Id를 의미) => select * from member_ship where uidx=?;
        //orElse : select 시 값이 없을 경우 null로 반환하는 return 메소드(findById에서만 사용 가능)
        /*
        //dto를 이용하여 업데이트 하는 방식
        jpa_dao jd=web_repo.findById(jds.getUidx()).orElse(null);
        jd.setUtel(jds.getUtel());
        jd.setUemail(jds.getUemail());
        jd.setUpost(jds.getUpost());
        jd.setUaddr1(jds.getUaddr1());
        jd.setUaddr2(jds.getUaddr2());
        if(!jds.getUpass().equals(null)) {		//신규 패스워드 값이 있을 경우
            jd.setUpass(jds.getUpass());
        }
        web_repo.save(jd);		
        //save : insert, update(select 후 변경된 값이 있을 경우)
        */

        //배열로 업데이트하는 방식
        List<jpa_dao> list=wr.findByUidx(jds.getUidx());	
        list.get(0).setUtel(jds.getUtel());
        list.get(0).setUemail(jds.getUemail());
        //나머지애들도 다해줘야함
        jpa_dao result=wr.save(list.get(0));		//update가 발생
        System.out.println(result + "입니당 ");
        wr.flush();			//database 지연시 메모리에 쌓여있는 값을 소모시킴

        this.pw=res.getWriter();
        this.pw.print("<script>"
                + "alert('수정이 완료되었습니다.');"
                + "location.href='./member_list';"
                + "</script>");
    } catch (IOException e) {
        this.pw.print("<script>"
                + "alert('오류가 발생하였습니다.');"
                + "</script>");
    } finally {
        this.pw.close();
    }
    return null;
}