Spring Boot CRUD

강지원·2023년 7월 2일
1
post-thumbnail

전공 동아리 팀 블로그 사이트 제작을 위해서 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를 관리할 수 있습니다.

profile
Backend Developer

0개의 댓글