[aws] 프로젝트의 기본
Post Entity
Entity 클래스에 절대 Setter 메소드를 만들지 마라
자바빈 규약을 생각하며 getter/setter를 생성하면 안됩니다. 해당 클래스의 인스턴스 값들이 언제 어디서 변해야 하는지 코드상으로 구분이 힘들어 차후 기능 변경시 복잡해집니다.
- 생성자를 통해 최종값을 채운 후 DB에 INSERT 하는 것이 기본입니다.
- 그 목적과 의도를 알 수 있는 메소드를 통해 값을 변경합니다.
@Getter
@NoArgsConstructor
@Entity
public class Posts {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(length = 500, nullable = false)
private String title;
@Column(columnDefinition = "TEXT", nullable = false)
private String content;
@Column
private String author;
@Builder
public Posts(String title, String content, String author) {
this.title = title;
this.content = content;
this.author = author;
}
}
PostRepository
public interface PostRepository extends JpaRepository<Posts, Long> { }
Repository Test
@SpringBootTest
class PostRepositoryTest {
@Autowired
PostRepository postRepository;
@AfterEach
public void clean(){
postRepository.deleteAll();
}
@Test
public void 게시글_저장_불러오기(){
//given
String title = "테스트 게시글";
String content = "테스트 게시글 본문";
String author = "jojolu@gmail.com";
//when
postRepository.save(Posts.builder()
.title(title)
.content(content)
.build());
List<Posts> postsList = postRepository.findAll();
//then
Posts posts = postsList.get(0);
assertThat(posts.getTitle()).isEqualTo(title);
assertThat(posts.getContent()).isEqualTo(content);
}
}
PostsApiController
@RequiredArgsConstructor
@RestController
public class PostsApiController {
private final PostsService postsService;
@PostMapping("/api/v1/posts")
public Long Save(@RequestBody PostsSaveRequestDto requestDto){
return postsService.save(requestDto);
}
}
PostsService
@RequiredArgsConstructor
@Service
public class PostsService {
private final PostsRepository postsRepository;
@Transactional
public Long save(PostsSaveRequestDto requestDto) {
return postsRepository.save(requestDto.toEntity()).getId();
}
}
PostsDto
@Getter
@NoArgsConstructor
public class PostsSaveRequestDto {
private String title;
private String content;
private String author;
@Builder
public PostsSaveRequestDto(String title, String content, String author) {
this.title = title;
this.content = content;
this.author = author;
}
public Posts toEntity() {
return Posts.builder().title(title).content(content).author(author).build();
}
}
댓글남기기