본문으로 바로가기

06.JpaApi②

category IT/SpringDay 2022. 5. 24. 01:33

1. Good API

  1) MemberRtnDto : 필요한 정보값만 담을 클래스 선언(불필요한 정보 노출x)

    - Entity보안
    - 유연성 --> Entity가 API에 의존적 X, 원하는 Data 생성 , 전달

  2) Result<T> : T는 인스턴스 생성할때 구체적인 타입으로 변경

@GetMapping("/restApi/v2/members")
	public Result membersV2() {
		List<Member> findMembers = memberService.getListAllMember();
		
		List<MemberRtnDto> memberCollect = findMembers.stream()
                               .map(m -> new MemberRtnDto(m.getName(), m.getSal())
                               .collect(Collectors.toList());
		return new Result(memberCollect.size(), memberCollect);
	}
	
	@Data
	@AllArgsConstructor
	class Result<T> {
		private int totCount;
		private T   data;
	}
	
	@Data
	@AllArgsConstructor
	class MemberRtnDto {
		private String name;
		private Long   sal;
	}
public List<Member> getListAllMember() {
		List<Member> listMember = memberRepository.findAll();
		System.out.println("서비스 전체 회원 조회");
		return listMember;
	}
@Override
	public List<Member> findAll() {
		System.out.println("find All 실행 ");
		//Sql no, jpa 문법
		List<Member> memberList = em.createQuery("select m from Member m", Member.class).getResultList();
		System.out.println("find All 끝");
		return memberList;
	}

3) 람다식

   -  람다식 안쓰고 memberCollect에 담는 방법 : 코드가 길어짐.

List<MemberRtnDto> memberCollect = null; 
	for(Member member : findMembers) {
		MemberRtnDto memberRtnDto = new MemberRtnDto(member.getName());
 		memberCollect.add(memberRtnDto);
	}

   - stream은 컬렉션의 요소를 하나씩 참조하여 람다식으로 처리할 수 있도록 해주는 일종의 반복자.

   - map(m-> new MemberRtnDto() : m은 List<Member>에 담긴 member객체를 MemberRtnDto 에         담아 새로운 스트림을 반환

   - collect : 그리고 스트림 형태를 다시 List 형태로 만들어준다.

List<MemberRtnDto> memberCollect = findMembers.stream()
			.map(m -> new MemberRtnDto(m.getName(), m.getSal())
			.collect(Collectors.toList());

 

2. 수정 API

  -  PUT은 전체 업데이트를 할 때  사용
  -  URI 상에서 '{ }' 로 감싸여있는 부분과 동일한 변수명을 사용하는 방법

@PutMapping("/api/v2/members/{id}")
	public UpdateMemberResponse updateMemberV2(@PathVariable("id") Long id, @RequestBody @Valid UpdateMemberRequest uMember) {
		memberService.update(id, uMember.getName(), uMember.getSal());
		Member findMember = memberService.findByMember(id);
		return new UpdateMemberResponse(findMember.getId(), findMember.getName(), findMember.getSal());
	}
	
	
	@Data
	static class UpdateMemberRequest {
		private String name;
		private Long sal;
	}
	
	@Data
	@AllArgsConstructor
	class UpdateMemberResponse {
		private Long 	id;
		private String 	name;
		private Long 	sal;
	}

- memberService.update(id, uMember.getName(), uMember.getSal());

public void update(Long id, String name, Long sal) {
		Member member = new Member();
		member.setId(id);
		member.setName(name);
		member.setSal(sal);
		System.out.println("서비스 멤버업데이트 member.getName() ->"+ member.getName());
		System.out.println("서비스 멤버업데이트 member.getSal() ->"+ member.getSal());
		memberRepository.updateByMember(member);
		
	}
@Override
	public int updateByMember(Member member) {
		int result = 0;
		System.out.println("레파지토리 updateByMember");
		
		Member member3 = em.find(Member.class, member.getId());
		
		if(member3 != null) {
			System.out.println("member3 != null");
			//회원저장
			member3.setName(member.getName());
			member3.setSal(member.getSal());
			em.persist(member3); 
			result=1;
		} else {
			result = 0;
			System.out.println("member3 == null");
		}
		System.out.println("result : " + result );
		System.out.println("레파지토리 updateByMember 끝");
		
		return result;
	}

- Member findMember = memberService.findByMember(id);

public Member findByMember(Long memberId) {
	Member member = memberRepository.findByMember(memberId);
	return member;
}
@Override
	public Member findByMember(Long memberId) {
		Member member = em.find(Member.class, memberId);
		return member;
	}

'IT > SpringDay' 카테고리의 다른 글

Mybatis②  (0) 2022.05.30
Mybatis①  (0) 2022.05.29
06.JpaApi①  (0) 2022.05.22
05.JPA02②  (0) 2022.05.19
05.JPA02①  (0) 2022.05.19