RESTful Web Service 개발 - Java Persistence API 사용_3

2023. 1. 27. 20:36·공부/Spring
반응형

 

 

Spring Boot를 이용한 RESTful Web Services 개발

게시물 관리를 위한 Post Entity 추가와 초기 데이터 생성

사용자가 작성할 수 있는 게시물 관련 Entity를 만들어보자. 사용자는 여러 개의 게시글을 작성할 수 있으며, 아예 작성을 하지 않을 수도 있다. 반대로 게시글은 사용자가 없으면 생성되지 못한다. 즉 User가 필수 데이터, Post가 옵셔널 데이터라고 생각하면 된다.

  • Post.java 생성

...
public class Post {
    
    @Id
    @GeneratedValue
    private Integer id;
    
    private  String description;
    
    @ManyToOne(fetch = FetchType.LAZY)
    @JsonIgnore
    private Users user;
    
}
  • ManyToOne : Post 입장에서 봤을 때 여러 개의 데이터가 존재할 때 User 데이터가 적어도 한 개는 있어야한다는 의미이다.
  • JsonIgnore : Json 포맷으로 응답 시 해당 어노테이션이 붙은 데이터는 외부로 노출되지 않는다.
  • fetch = FetchType.LAZY : 지연 로딩 방식. 지연 로딩 방식은 사용자 Entity를 조회할 때 Post Entity가 같이 로딩 되는 것이 아니라 Post 데이터가 로딩되는 시점에 같이 User 데이터도 가져온다는 의미이다.
반응형
  • Users.java
@OneToMany(mappedBy = "user")
private List<Post> post;
  • OneToMany : User 입장에서 봤을 때 한 명의 사용가자 있으면 여러 개의 게시글을 작성 할 수 있다.
  • mappedBy는 Post.java에서 관계를 설정해준 필드 명을 기재한다.

 

  • data.sql

Post 더미 데이터 생성

insert into post values(10001, 'My first post', 9901);
insert into post values(10002, 'My second post', 9902);

서버 재실행 후 h2 데이터베이스 확인

 

 

게시물 조회를 위한 Post Entity와 User Entity와의 관계 설정

Post Entity를 이용한 메서드를 작성하자.

  • UserJapController.java
@GetMapping("/users/{id}/post")
public List<Post> retrieveAllPostByUser(@PathVariable int id) {
    Optional<Users> user = userRepository.findById(id);
    
    if(!user.isPresent()) {
        throw new UserNotFoundException(String.format("ID [%s] not found.", id));
    }
    
    return user.get().getPost();
}

서버 재실행 후 포스트맨 확인

반응형

나는 더미 데이터에 9901 사용자 게시글을 하나만 insert해서 post 한 개 데이터만 보인다.

전체 사용자 목록 조회 시에도 Post 데이터를 확인할 수 있다.

 

 

JPA를 이용한 새 게시물 추가 - POST HTTP Method

  • PostRepository.interface 생성

@Repository
public interface PostRepository extends JpaRepository<Post, Integer> {
    
}

 

  • UserJapController.java
@PostMapping("/users/{id}/posts")
public ResponseEntity<Post> createPost(@PathVariable int id,
                                       @RequestBody Post post) {
    // user id 검색 후 저장
    Optional<Users> user = userRepository.findById(id);

    if(!user.isPresent()) throw new UserNotFoundException(String.format("ID [%s] not found", id));

    // user 객체 저장
    post.setUser(user.get());
    
    Post savedPost = postRepository.save(post);

    URI location = ServletUriComponentsBuilder.fromCurrentRequest()
            .path("/{id}")
            .buildAndExpand(savedPost.getId())
            .toUri();
    
    return ResponseEntity.created(location).build();
}
반응형

서버 재실행 후 포스트맨 확인

사용자 게시글 조회

추가가 된 걸 확인할 수 있다.

 

 


- 출처 : 인프런 Spring Boot를 이용한 RESTful Web Services 개발 강의

반응형
저작자표시 비영리 변경금지 (새창열림)
'공부/Spring' 카테고리의 다른 글
  • Spring Cloud로 개발하는 마이크로서비스 애플리케이션_Microservice와 Spring Cloud의 소개_2
  • Spring Cloud로 개발하는 마이크로서비스 애플리케이션_Microservice와 Spring Cloud의 소개_1
  • RESTful Web Service 개발 - Java Persistence API 사용_2
  • RESTful Web Service 개발 - Java Persistence API 사용_1
데부한
데부한
어차피 할 거면 긍정적으로 하고 싶은 개발자
    반응형
  • 데부한
    동동이개발바닥
    데부한
  • 전체
    오늘
    어제
    • 분류 전체보기 (307)
      • 방통대 컴퓨터과학과 (27)
        • 잡담 (9)
        • 3학년1학기 (17)
      • 프로젝트 및 컨퍼런스 회고 (1)
        • 프로젝트 (4)
        • 한이음 프로젝트 (0)
        • 회고 (3)
      • 공부 (165)
        • Spring (37)
        • JPA (71)
        • 인프런 워밍업 클럽_BE (10)
        • Java (6)
        • React.js (27)
        • 넥사크로 (11)
        • 기타 (3)
      • 알고리즘 (85)
        • 알고리즘 유형 (10)
        • 알고리즘 풀이 (57)
        • SQL 풀이 (18)
      • 에러 해결 (13)
      • 잡담 (7)
        • 국비교육 (2)
        • 구매후기 (5)
        • 진짜 잡담 (0)
  • 블로그 메뉴

    • Github
    • Linkedin
    • 홈
    • 방명록
    • 글쓰기
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    egov
    QueryDSL
    프로그래머스
    스프링부트
    기출문제
    Spring
    토비의스프링부트
    IT
    코딩테스트
    토이프로젝트
    인프런
    알고리즘
    운영체제
    SQL
    방통대
    react
    프론트엔드
    oracle
    전자정부프레임워크
    백준
    개발자
    넥사크로
    SpringBoot를 이용한 RESTful Web Service 개발
    MSA
    JPA
    RESTful
    에러해결
    자바스크립트
    springboot
    Java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
데부한
RESTful Web Service 개발 - Java Persistence API 사용_3
상단으로

티스토리툴바