전공 동아리 팀 블로그 사이트 제작을 위해서 Spring Boot CRUD를 구현해보았습니다.
새벽에 동아리 선배님께서 라이브 코딩으로 알려주셨는데
스프링 부트 CRUD 개발 흐름을 잡는데 매우 도움되었습니다.
이 포스트는 공부한 내용을 정리하고자 작성합니다.
1.CRUD를 구현하기 위한 DB를 설치합니다.
저는 Mysql을 사용했습니다.
2.스프링부트 프로젝트를 생성해야합니다.
https://start.spring.io/
3.데이터베이스를 생성합니다.
CREATE DATABASE post_server
4.Properties 파일을 yml로 변경합니다.(DB 환경 설정)
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/post_server
username: root
password: 12345678
logging:
level:
org:
hibernate:
SQL: debug
jpa:
database: mysql
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
generate-ddl: true
hibernate:
ddl-auto: update
이제부터 CRUD를 구현하는 코드를 작성해보겠습니다.
Post Class
package org.insert.postserver;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Getter
public class Post {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // 기본 키 생성
@Column(name = "post_id",nullable = false) // 컬럼 이름 post_id,null값 X
private Long id;
private String title;
private String context;
public Post(String title,String context) {
this.title = title;
this.context = context;
}
public void update(String title,String context) {
this.title = title;
this.context = context;
}
}
PostRepository (인터페이스)
package org.insert.postserver;
import org.springframework.data.jpa.repository.JpaRepository;
public interface PostRepository extends JpaRepository<Post,Long> {
}
PostService
package org.insert.postserver;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
public class PostService {
private final PostRepository postRepository;
public PostDto create(PostDto postDto) {
Post post = new Post(postDto.getTitle(),postDto.getContext()); // id null
Post save = postRepository.save(post); // id가 들어간 객체 반환
return new PostDto(save);
}
public PostDto findOne(Long id) {
Post post = postRepository.findById(id)
.orElseThrow(() -> new IllegalArgumentException("No Post exist"));
return new PostDto(post);
}
public List<PostDto> findAll() {
return postRepository.findAll()
.stream()
.map(PostDto::new)
.collect(Collectors.toList());
}
public PostDto update(PostDto postDto) {
Post post = postRepository.findById(postDto.getId())
.orElseThrow(() -> new IllegalArgumentException("No Post exist"));
post.update(post.getTitle(),post.getContext());
return new PostDto(post);
}
public void delete(Long id) {
postRepository.deleteById(id);
}
}
PostController
package org.insert.postserver;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequiredArgsConstructor
public class PostController {
private final PostService postService;
@PostMapping("/create/post")
public PostDto create(@RequestBody PostDto postDto) {
return postService.create(postDto);
}
@GetMapping("/get/{id}")
public PostDto findOne(@PathVariable Long id) {
return postService.findOne(id);
}
@GetMapping("/get/all")
public List<PostDto> findAll() {
return postService.findAll();
}
@PostMapping("/update")
public PostDto update(@RequestBody PostDto postDto) {
return postService.update(postDto);
}
@DeleteMapping("/delete/{id}")
public void delete(@PathVariable Long id) {
postService.delete(id);
}
}
PostDTO
package org.insert.postserver;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Getter
@NoArgsConstructor
public class PostDto {
private Long id;
private String title;
private String context;
public PostDto(Post post) {
this.id = post.getId();
this.title = post.getTitle();
this.context = post.getContext();
}
}
참고) IntelliJ IDEA에서 자체적으로 Database를 관리할 수 있습니다.