Spring basic, JPA CRUD만들어보기

앞고기랑 소금·2024년 8월 21일

스파르타 TIL

목록 보기
26/43

26일차

Controller

@RestController
@RequiredArgsConstructor
public class MemberController {
    private final MemberService memberService;
}

Service

@Service
@RequiredArgsConstructor
public class MemberService {
    private final MemberRepository memberRepository;
}

Create

  • Controller
@PostMapping("/members")
public ResponseEntity<MemberSaveResponseDto> saveMember(@RequestBody MemberSaveRequestDto memberSaveRequestDto) {
	return ResponseEntity.ok(memberService.saveMember(memberSaveRequestDto));
}
  • Service
@Transactional  // Request DTO -> entity -> Repository -> Response DTO ?
public MemberSaveResponseDto saveMember(MemberSaveRequestDto memberSaveRequestDto) {
	Member newMember = new Member(memberSaveRequestDto.getName()); // Request DTO -> entity
    Member saveMember = memberRepository.save(newMember); // entity -> Repository ?

    return new MemberSaveResponseDto(saveMember.getName()); // Repository -> Response DTO ?
//  MemberSaveResponseDto member = new MemberSaveResponseDto(saveMember.getId(), saveMember.getName());
//  return member;
}
  • Postman

Read

  • Controller
@GetMapping("/members")
public ResponseEntity<List<MemberSimpleResponseDto>> getMemberList() {
	return ResponseEntity.ok(memberService.getMemberList());
}

@GetMapping("/members/{id}")
public ResponseEntity<MemberSaveResponseDto> getMemberId(@PathVariable Long id) {
	return ResponseEntity.ok(memberService.getMemberId(id));
}
  • Service
// Repository -> List<Member> -> List<MemberSimpleResponseDto>
// Repository -> List<entity> -> List<Response DTO> ?
// CRUD중 R은 @Transactional 안붙임
public List<MemberSimpleResponseDto> getMemberList() {
	List<Member> newMemberList = memberRepository.findAll(); // Repository -> List<Member> ?

    List<MemberSimpleResponseDto> memberSaveResponseDtos = new ArrayList<>(); // List<MemberSimpleResponseDto> 생성
    for (Member member : newMemberList) {
    	memberSaveResponseDtos.add(new MemberSimpleResponseDto(member.getId(), member.getName()));
    } // newMemberList -> memberSaveResponseDtos
      // List<Member> -> List<MemberSimpleResponseDto>
	return memberSaveResponseDtos;
    }
// Repository -> entity -> ResponseDTO
public MemberSaveResponseDto getMemberId(Long id) {
	Member newMember = memberRepository.findById(id).orElseThrow(() -> new NullPointerException("id없다")); // Repository -> entity
    return new MemberSaveResponseDto(newMember.getName());
//  MemberSaveResponseDto responseDto = new MemberSaveResponseDto(newMember.getName()); // entity -> ResponseDTO
//  return responseDto;
    }

CRUD중 R은 @Transactional 안붙임

  • Postman

Update

  • Controller
@PutMapping("/members/update/{id}")
public ResponseEntity<MemberUpdateResponseDto> updateMember(@RequestBody MemberUpdateRequestDto memberUpdateRequestDto, @PathVariable Long id) {
	return ResponseEntity.ok(memberService.updateMember(memberUpdateRequestDto, id));
}
  • Service
@Transactional // Repository -> entity -> entity RequestDTO 값받아서 수정 -> ResponseDTO
public MemberUpdateResponseDto updateMember(MemberUpdateRequestDto memberUpdateRequestDto, Long id) {
	Member newMember = memberRepository.findById(id).orElseThrow(() -> new NullPointerException("id없다")); // Repository -> entity ?
    
    newMember.update(memberUpdateRequestDto.getName()); // entity RequestDTO 값받아서 수정
    
    return new MemberUpdateResponseDto(newMember.getId(), newMember.getName()); // entity -> ResponseDTO
}
  • Postman

Delete

  • Controller
@DeleteMapping("/members/delete/{id}")
public String deleteMember(@PathVariable Long id) {
	memberService.deleteMember(id);
	return "삭제 완료";
}
  • Service
@Transactional // Repository 에서 entity 찾고 Repository 에서 찾은 entity 삭제
public void deleteMember(Long id) {
	memberRepository.delete(memberRepository.findById(id).orElseThrow(() -> new NullPointerException("id없다")));
}
  • Postman

0개의 댓글