서비스 계층, DTO

Shaun·2021년 8월 1일
0

project

목록 보기
4/9
post-thumbnail

First of all why DTO???

-JPA 엔티티 객체는 단순히 데이터를 담는 객체가 아니라 실제 DB와 관련이 있고 내부적으로 엔티티 매니저가 관리하는 객체이다.

-DTO가 일회성으로 데이터를 주고받는 용도로 사용되는 것과 달리 생명주기도 전혀 다르다.

DTO

  • 읽고 쓰는거 모두 허용, 일회성
  • 목적 자체는 데이터 전달 이다.
  • DTO를 사용하면 엔티티 객체의 범위를 한정 지을 수 있기 떄문에 좀 더 안전한 코드를 작성 할 수 있다.
    - 단점은 엔티티객체를 DTO로 변환하거나 DTO를 엔티티로 변화하는 과정 필요.

서비스 계층 만들기

※ 서비스 계층에서는 DTO타입으로 받고 JPA처리를 위해서는 엔티티 타입의 객체로 변환해야 한다.

DTO -> ENTITY(default선언)

이제 DTO로 받은 정보를 엔티티로 변환해 JPA를 사용이 가능하다.

REGISTER(등록)

-코드설명-

  • DTO -> ENTITY(JPA를 쓰기위해) -> JPA 기본기능 SAVE(저장)
  • GuestbookRepository 를 주입한다 JPA 처리를 위해
  • 마지막은 저장을 한뒤 게시판 번호 반환

목록(LIST)

1.화면에서 필요한 DTO
2. DTO를 Pageable으로 변환
3.Page<Entity.>를 화면에서 사용하기 쉬운 DTO리스트 변환
4. 화면에 필요한 페이지번호

페이지 요청처리(pageRequest DTO)

  • JPA를 이용하는 경우 페이지 번호가 0부터 시작한다는 점을 감안해 1페이지의 경우 0이 될수 있도록 page-1을 해준다.
  • 정렬 은 나중에 다양한 상황에 재사용 하기위해 파라미터로 받는다.

페이지 결과 처리 DTO(PageResult DTO)(임시)

  • page<Entity.>의 엔티티 객체들을 DTO로 변환 해야한다.
  • function은 엔티티->DTO로 변환 해 주는 기능이다.
  • 다향한 곳에서 사용 가능하도록 제네릭 타입을 이용 한다.

서비스 계층/목록기능/getList()

ENTITY -> DTO

getList() 구현 (BooleanBuilder 나중에 사용)

목록데이터 페이지 처리

  • 화면에서 시작 페이지 번호(start)
  • 화면에서 끝 페이지 번호(end)
  • 이전/다음 링크 여부(prev,next)
  • 현재 페이지 번호(page)
    	1. 끝번호=> tempEnd=(int)(Math.ceil(페이지번호/10.0)*10
        	2. 시작번호=> start =temEnd-9
    1페이지의 경우 마지막 번호:Math.ceil(0.1)10 =10
    10페이지의 경우 마지막 번회:Math.ceil(1)
    10 =10
    11페이지의 경우 마지막 번호:Math.ceil(1.1)*10 =20

잠깐!

※ 끝번호는 실제 끝번호 와 다를수 있다
※page<엔티티 타입>의 getTotalPages() 를 사용하
자!

  • totalPage=result.getTotalPage(); //result= 는Page

  • end= totalPage > temEnd ? tempEnd : totalPage

  • next= toalPage>temEnd //다음(next)

위의 내용들을 pageResultDTO 에 반영하면 이렇게 된다.


profile
호주쉐프에서 개발자까지..

0개의 댓글

관련 채용 정보