이번 포스팅에서는 MemberService.java, MemberServiceImpl.java 두 클래스를 작성해 보겠습니다.
MemberService.java -> 인터페이스
package com.example.practice.service;
import java.util.List;
import com.example.practice.model.Member;
public interface MemberService {
List<Member> findAll();
Member findBymemNum(int memNum);
void deleteBymemNum(int memNum);
Member save(Member member);
List<Member> findBymemNumBetween(int memNum1, int memNum2);
void updateBymemNum(int memNum, Member member);
}
각각 코드에 대한 설명을 간단하게 알아보겠습니다.
List<Member> findAll(); - 모든 회원 정보 출력
Member findBymemNum(int memNum); - 회원고유번호로 회원찾기(select)
void deleteBymemNum(int memNum); - 회원삭제하기(탈퇴하기, delete)
Member save(Member member); - 회원가입(회원 저장하기, insert)
List<Member> findBymemNumBetween(int memNum1, int memNum2);
- 회원 정보로 검색하기 (두 회원번호 사이의 회원 찾기/ 예: 회원번호 10-15 회원 정보 보기)
void updateBymemNum(int memNum, Member member);
- 회원 정보 수정하기 (update)
MemberServiceImpl.java -> 자바 클래스
package com.example.practice.service;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.example.practice.exception.ResourceNotExistException;
import com.example.practice.model.Member;
import com.example.practice.repository.MemberRepository;
@Service
public class MemberServiceImpl implements MemberService{
@Autowired
private MemberRepository memberRepository;
@Override
public List<Member> findAll() {
List<Member> members = new ArrayList<>();
memberRepository.findAll().forEach(e -> members.add(e));
return members;
}
@Override
public Member findBymemNum(int memNum) {
Member member = memberRepository.findById(memNum).orElseThrow(() ->
new ResourceNotExistException("Member", "memNum", memNum));
return member;
}
@Override
public void deleteBymemNum(int memNum) {
memberRepository.deleteById(memNum);
}
@Override
public Member save(Member member) {
memberRepository.save(member);
return member;
}
@Override
public List<Member> findBymemNumBetween(int memNum1, int memNum2) {
List<Member> members = memberRepository.findBymemNumBetween(memNum1, memNum2);
if(members.size() > 0)
return members;
else
return null;
}
@Override
public void updateBymemNum(int memNum, Member member) {
//수정할 사원 정보 불러오기
Member mem = memberRepository.findById(memNum).orElseThrow(() ->
new ResourceNotExistException("Member", "memNum", memNum));
mem.setMemName(member.getMemName());
mem.setMemId(member.getMemId());
memberRepository.save(member);
}
}
findAll - 회원 정보를 불러와서 각각 새로운 회원정보 리스트에 담아서 출력
findBymemNum - 회원 고유번호로 조회를 하되 존재하지 않을 경우 생기는 error에 대한 예외처리하기
- 예외처리 ResourceNotExistException("Member", "memNum", memNum)
- 예외처리 코드는 아래에 있습니다.
deleteBymemNum / save - 회원 삭제, 입력
findBymemNumBetween - 두 개의 회원 고유번호 사이의 회원들의 정보 조회
- 회원이 없을 시 null값 리턴, 정보가 있을 경우 리스트 출력
updateBymemNum - 수정할 회원의 정보를 불러옵니다 (findById)
- 불러온 정보를 수정하여 다시 저장 (save)
*저는 회원 이름과 아이디를 수정하게 하였습니다.
ResourceNotExistException.java - 예외처리 코드
package com.example.practice.exception;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;
@ResponseStatus(value = HttpStatus.NOT_FOUND)
public class ResourceNotExistException extends RuntimeException{
private String resourceName;
private String fieldName;
private Object fieldValue;
public ResourceNotExistException(String resourceName, String fieldName, Object fieldValue) {
super(String.format("%s not found with %s : '%s'", resourceName, fieldName, fieldValue));
this.resourceName = resourceName;
this.fieldName = fieldName;
this.fieldValue = fieldValue;
}
public String getResourceName() {
return resourceName;
}
public void setResourceName(String resourceName) {
this.resourceName = resourceName;
}
public String getFieldName() {
return fieldName;
}
public void setFieldName(String fieldName) {
this.fieldName = fieldName;
}
public Object getFieldValue() {
return fieldValue;
}
public void setFieldValue(Object fieldValue) {
this.fieldValue = fieldValue;
}
}
필드에 대한 getter, setter, 생성자를 생성해주시면 됩니다.
super(String.format("%s not found with %s : '%s'",
resourceName, fieldName, fieldValue));
이 부분만 직접 추가한 부분입니다.
검색한 회원 정보가 존재하지 않을 시 띄울 메시지 입니다.
여기까지 작성이 완료 되셨다면 다음 포스팅 부터는 Controller를 작성하고
각각의 기능을 실행시켜보며 어떻게 출력되는지 확인해보겠습니다~^^
다음으로 고고 -> https://amy-ming.tistory.com/17
'Programing > JPA' 카테고리의 다른 글
JPA 실습하기 (7) (0) | 2021.06.21 |
---|---|
JPA 실습하기 (6) (0) | 2021.06.21 |
JPA 실습하기 (4) (0) | 2021.06.15 |
JPA 실습하기 (3) (0) | 2021.06.14 |
JPA 실습하기 (2) (0) | 2021.06.14 |