오늘은 회원 수정을 해보려고합니다.(난이도 ⭐⭐⭐)
JPA가 아직 서툴다보니 수정에서 시간이 꽤 걸렸습니다. 강의를 더 사서 들어봐야하나🥲
✏️Repository(수정)
EntityManager의 createQuery() 메서드를 사용하여 update쿼리를 작성했습니다.
찾아보니 @Modifying 어노테이션을 사용하여 수정을 많이 하는것같더라구요 좀 더 공부해서 적용해보겠습니다
public int update(Member member) {
return em.createQuery("update Member m set m.name = :name, m.age = :age, m.pw = :pw where m.id = :id")
.setParameter("name", member.getName())
.setParameter("age", member.getAge())
.setParameter("pw", member.getPw())
.setParameter("id", member.getId())
.executeUpdate();
}
아이디를 찾는 쿼리
public List<Member> findById(Long id){
return em.createQuery("select m from Member m where m.id = :id", Member.class)
.setParameter("id", id)
.getResultList();
}
✏️Service(수정)
update에서도 @Transactional은 필수입니다!
lombok에 builder를 사용해서 받아와줍니다. 다른방법을 찾다가 결국 builder의 힘을 빌렸습니다.
@Transactional
@Override
public void modifyMember(HttpServletRequest request) {
Long id = Long.parseLong(request.getParameter("id"));
String name = request.getParameter("name");
int age = Integer.parseInt(request.getParameter("age"));
String pw = request.getParameter("pw");
Member member = Member.builder()
.id(id)
.name(name)
.age(age)
.pw(pw)
.build();
int modifyResult = memberRepository.update(member);
if (modifyResult == 1) {
HttpSession session = request.getSession();
Member sessionMember = (Member) session.getAttribute("member");
sessionMember.setName(name);
sessionMember.setAge(age);
sessionMember.setPw(pw);
}
new ResponseEntity<>(Map.of("modifyResult", modifyResult), HttpStatus.OK);
}
✏️Controller(수정)
GetMapping수정페이지
페이지 이동할때 아이디가 넘어와야하기 때문에
Repository클래스에서 아이디를 가져오는 메서드(findById)가 필요합니다!
@GetMapping(value ="/modifyMember")
public String modifyMemberForm(Model model, Long id){
List<Member> members = memberRepository.findById(id);
if (!members.isEmpty()) {
model.addAttribute("member", members.get(0));
} else {
throw new NoSuchElementException("Member not found with id: " + id);
}
return "members/modifyMember";
}
PostMapping수정페이지
@PostMapping(value ="/modifyMember")
public void modifyMember(HttpServletRequest request){
memberService.modifyMember(request);
}
✏️Html(수정)
수정페이지로 넘어갈때 id를 파라미터로 넘겨줍니다.
<a th:href="@{members/modifyMember(id=${session.member.id})}">회원수정</a>
수정페이지 th:value로 수정할값을 작성합니다.
<form method="post" th:action="@{/members/modifyMember}">
<label for="name">이름</label>
<input type="text" th:value="${session.member.name}" name="name" id="name" class="form-control">
<label for="age">나이</label>
<input type="number" th:value="${session.member.age}" name="age" id="age" class="form-control">
<label for="pw">비밀번호</label>
<input type="password" th:value="${session.member.pw}" name="pw" id="pw" class="form-control">
<input type="hidden" th:value="${session.member.id}" name="id" id="id">
<button type="submit">정보수정하기</button>
</form>
'코딩기록 저장소 🐕 > 스스로 프로젝트와 연습' 카테고리의 다른 글
Query Dsl 적용해보기①🥲 (0) | 2024.05.31 |
---|---|
프로젝트(SpringBoot)에 JPA적용해보기6 삭제와 @Transactional (0) | 2024.05.21 |
프로젝트(SpringBoot)에 JPA적용해보기4 🫡 (0) | 2024.05.18 |
프로젝트(SpringBoot)에 JPA적용해보기3 ☺️ (0) | 2024.05.17 |
JPA P6spy 사용해보기🫡 (0) | 2024.05.10 |