C R U D

김창모·2023년 5월 29일
0

SpringBoot

목록 보기
11/19

CRUD란 ?

우리가 데이터를 다루는 기본적인 방법엔 아래 네가지가 있다.
Create (생성)
Read (조회)
Update (수정)
Delete (삭제)
앞글자를 따서 CRUD 라고 부르며 지난 시간엔 Create 를 해보았다
오늘은 나머지 기능을 완성해보자.

Read

    @GetMapping("/member/{id}")
    public Optional<Member> findMember(@PathVariable Long id) {
        return memberService.findMember(id);
    }

MemberController 에 위의 코드를 추가해주었다.
"/member/{id}" 로 요청을 보낼시 위의 메서드가 실행되며
/{id} 부분의 값은 @PathVariable 어노테이션을 사용하여 인자로 받을수 있다.
"member/1" 로 Get 요청을 보냈다면 findMember(1L) 이 실행되며
memberService.findMember(1L) 이 반환된다는 뜻이다.

    public Optional<Member> findMember(Long id) {

        return memberJpaRepository.findById(id);
    }

MemberService 의 findMember 코드이다.
Long 타입의 id 를 전달받아 memberJpaRepository 의 상속받은 메서드중 findById() 를 사용한다.

Optional ?

findById() 의 리턴값을 보면 Optional 이 붙어있다.
기존에는 Null 값에 대해 Nullpointerexception 등의 문제가 발생할수 있었다.
이를 편리하게 해주는 것이 Optional 이다.

우리는 Member Entity 를 등록할때 Id 값을 리턴 받아서 우리가 추가한 데이터의 PK 값이 1 이란걸 알고있다.
이를 이용하여 조회를 실행해보자.

우리가 추가한 데이터와 일치하는 Member 값이 조회되었다.

Update

    @PutMapping("/member/{id}")
    public void updateMember(@PathVariable Long id) {
        memberService.updateMember(id);
    }

Controller 에 위 코드를 추가해주었다.

    public void updateMember(Long id) {
        Optional<Member> findById = memberJpaRepository.findById(id);
        Member findMember = findById.get();
        findMember.updateMember(findMember.getEmail(),"이창모",findMember.getPassword());
    }

Service 도 변경해주었다.

"/member/{id}" 로 put 요청을 보내면
id 값으로 회원을 조회하고 조회한 회원의 정보를 수정할수 있다.
이때 수정한 회원의 정보를 다시 저장하여도 되지만 메서드 위에
@Transactional 어노테이션을 붙여주면 더티체킹 을 통해 엔티티의 변화를 감지하고
update query 를 전송해준다.
MemberService 의 update 메서드에 @Transactional 어노테이션을 추가해주자.

@Transactional 이란?

뜻을 해석해보면 데이터베이스의 상태를 변화시키는 작업의 수행 단위를 의미한다.
@Transactional 어노테이션을 붙인 메서드는 전체를 하나의 수행 단위로 본다는 의미이다.

member/1 URL 로 put 요청을 보낸후 다시 조회를 해보자.

name 을 보면 김창모 -> 이창모 로 변경된것을 볼수있다.

Delete

    @DeleteMapping("/member/{id}")
    public void deleteMember(@PathVariable Long id) {
        memberService.deleteMember(id);
    }
    public void deleteMember(Long id) {
        memberJpaRepository.deleteById(id);
    }

위와 마찬가지로 Controller , Service 에 메서드를 추가해준다.

현재는 정상적으로 조회가 되고있다.

"localhost:8080/member/1" 로 Delete 요청을 보내고 난후 다시 조회하니 값이 null 이 나온다.

H2 DB 에서 직접 쿼리로 확인해보아도 데이터가 조회되지 않는것을 확인할수 있다.

0개의 댓글