// MemberController.java
package com.herojoon.jpaproject.controller;
import com.herojoon.jpaproject.entity.Member;
import com.herojoon.jpaproject.service.MemberService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
@RequiredArgsConstructor
@RequestMapping("api/member")
@RestController
public class MemberController {
private final MemberService memberService;
/**
* Member 생성
*
* @return
* @throws ParseException
*/
@PostMapping("create")
public ResponseEntity<Member> createMember() throws ParseException {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date = format.parse("2011-12-03");
Member member = Member.builder()
.name("herojoon")
.email("herojoon432@gmail.com")
.nickname("heroble")
.age(10)
.birthday(date)
.build();
Member savedMember = memberService.createMember(member);
return new ResponseEntity<>(savedMember, HttpStatus.OK);
}
/**
* Member 수정
*
* @return
* @throws ParseException
*/
@PutMapping("update")
public ResponseEntity<Member> updateMember() throws ParseException {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date = format.parse("2011-12-03");
Member member = Member.builder()
.id(1l)
.name("herojoon2")
.email("herojoon432@gmail.com")
.nickname("heroble2")
.age(10)
.birthday(date)
.build();
Member updatedMember = memberService.updateMember(member);
if (!ObjectUtils.isEmpty(updatedMember)) {
return new ResponseEntity<>(updatedMember, HttpStatus.OK);
} else {
return new ResponseEntity<>(member, HttpStatus.NOT_FOUND);
}
}
/**
* Member List 조회
*
* @return
*/
@GetMapping("list")
public ResponseEntity<List<Member>> getMembers() {
List<Member> members = memberService.getMembers();
return new ResponseEntity<>(members, HttpStatus.OK);
}
/**
* Id에 해당하는 Member 조회
*
* @param id
* @return
*/
@GetMapping("{id}")
public ResponseEntity<Member> getMember(
@PathVariable("id") Long id) {
Member member = memberService.getMember(id);
return new ResponseEntity<>(member, HttpStatus.OK);
}
/**
* Id에 해당하는 Member 삭제
*
* @param id
* @return
*/
@DeleteMapping("{id}")
public ResponseEntity<Long> deleteMember(
@PathVariable("id") Long id) {
memberService.deleteMember(id);
return new ResponseEntity<>(id, HttpStatus.OK);
}
}
// MemberService.java
package com.herojoon.jpaproject.service;
import com.herojoon.jpaproject.entity.Member;
import com.herojoon.jpaproject.repository.MemberRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import java.util.List;
@Slf4j
@Service
@RequiredArgsConstructor
public class MemberService {
private final MemberRepository memberRepository;
/**
* Member 생성
*
* @param member
* @return
*/
public Member createMember(Member member) {
Member savedMember = memberRepository.save(member); // JpaRepository에서 제공하는 save() 함수
return savedMember;
}
/**
* Member 수정
* JPA Repository의 save Method를 사용하여 객체를 업데이트 할 수 있습니다.
* Entity Member에 @Id로 설정한 키 값이 존재할 경우 해당하는 데이터를 업데이트 해줍니다.
* 만약 수정하려는 Entity Member 객체에 @Id 값이 존재하지 않으면 Insert 되기 때문에
* 아래와 같이 업데이트 하고자 하는 Member가 존재하는지 체크하는 로직을 추가하였습니다.
*
* @param member
* @return
*/
public Member updateMember(Member member) {
Member updatedMember = null;
try {
Member existMember = getMember(member.getId());
if (!ObjectUtils.isEmpty(existMember)) {
updatedMember = memberRepository.save(member); // JpaRepository에서 제공하는 save() 함수
}
} catch (Exception e) {
log.info("[Fail] e: " + e.toString());
} finally {
return updatedMember;
}
}
/**
* Member List 조회
*
* @return
*/
public List<Member> getMembers() {
return memberRepository.findAll(); // JpaRepository에서 제공하는 findAll() 함수
}
/**
* Id에 해당하는 Member 조회
*
* @param id
* @return
*/
public Member getMember(Long id) {
return memberRepository.getById(id); // JpaRepository에서 제공하는 getById() 함수
}
/**
* Id에 해당하는 Member 삭제
*
* @param id
*/
public void deleteMember(Long id) {
memberRepository.deleteById(id); // JpaRepository에서 제공하는 deleteById() 함수
}
}