먼저 모델을 만들어준다. DB에 테이블을 만들어주고 내부에 선언된 변수들은 컬럼명이라고 생각하면된다.
데이터의 불변성을 보장해 주기 위해 Entity 내부 변수에 대한 Setter 함수는 정의 하지 않는게 좋지만,
여기선 @Data로 어노테이션으로 ...
Post.java
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Entity
@Table(name="posts", uniqueConstraints = {@UniqueConstraint(columnNames = {"title"})})
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Post {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name="title", nullable=false)
private String title;
@Column(name="description", nullable=false)
private String description;
@Column(name="content", nullable=false)
private String content;
}
@Table(name="posts", uniqueConstraints = {@UniqueConstraint(columnNames = {"title"})})
DB테이블의 이름 posts와 매핑됨, 유니크설정 열은 title(title은 중복방지)
@AllArgsConstructor
@NoArgsConstructor
@Column(name = "title", nullable = false)
테이블이 생성 된 걸 확인할 수 있다!!
Spring JPA 에서 제공하는 Repository 라는 인터페이스를 정의해 해당 Entity 의 데이터를 사용 할 수 있다.
<>안에는 엔티티 클래스 이름과 ID 필드 타입이 지정해주면 된다.
public interface PostRepository extends JpaRepository<Post, Long>{
}
Entity는 Controller, Client단에서 쓰이면 직접 쓰이면 좋은 설계가 아니기 때문에
Entity는 실제 DB테이블과 매칭되기때문에 안전하게 Dto를 만들어서 Entity를 DTO(데이터 전송 객체)로 바꿔 사용해야한다.
@Data
public class PostDto {
private Long id;
private String title;
private String description;
private String content;
}
이제 기능 구현을 하는 서비스단을 생성한다.
postRepository에 JpaRepository 상속했기 때문에 save() 메서드를 사용할수있다.
@Service
public class PostService {
@Autowired
private PostRepository postRepository;
public PostDto createPost(PostDto postDto) {
// PostDto => Post 변환
Post post = new Post();
post.setTitle(postDto.getTitle());
post.setContent(postDto.getContent());
post.setDescription(postDto.getDescription());
// DB에 새 포스트 저장 (리턴 Post)
Post newPost = postRepository.save(post);
// Post => PostDto 변환
PostDto postResponse = new PostDto();
postResponse.setId(newPost.getId());
postResponse.setTitle(newPost.getTitle());
postResponse.setContent(newPost.getContent());
postResponse.setDescription(newPost.getDescription());
return postResponse;
}
}
@RestController
@RequestMapping("/api/posts")
public class PostController {
private PostService postService;
public PostController(PostService postService) {
this.postService = postService;
}
@PostMapping
public ResponseEntity<PostDto> createPost(@RequestBody PostDto postDto){
PostDto postResponse = postService.createPost(postDto);
return new ResponseEntity<>(postResponse, HttpStatus.CREATED);
}
}
포스트맨으로 설정해놓은 api주소를 입력하고 키값을 넣어주면 DB에 저장되는걸 확인 할 수 있다.