상세 컨텐츠

본문 제목

Spring - 순수 JPA와 DTO를 이용한 게시판 예제

웹/Spring

by JORDON 2023. 6. 7. 15:50

본문

반응형

아래는 순수 JPA와 DTO, Repository, Service, Entity를

이용한 간단한 게시판 예제입니다.

 

DTO (Data Transfer Object):

public class PostDTO {
    private Long id;
    private String title;
    private String content;

    // Getter and Setter
}

Entity:

@Entity
@Table(name = "posts")
public class Post {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private String title;

    @Column(nullable = false)
    private String content;

    // Getter and Setter
}

Repository:

public interface PostRepository {
    void save(Post post);
    Post findById(Long id);
    List<Post> findAll();
    void delete(Post post);
}

RepositoryImpl:

@Repository
public class PostRepositoryImpl implements PostRepository {

    @PersistenceContext
    private EntityManager entityManager;

    @Override
    public void save(Post post) {
        entityManager.persist(post);
    }

    @Override
    public Post findById(Long id) {
        return entityManager.find(Post.class, id);
    }

    @Override
    public List<Post> findAll() {
        return entityManager.createQuery("SELECT p FROM Post p", Post.class).getResultList();
    }

    @Override
    public void delete(Post post) {
        entityManager.remove(post);
    }
}

Service:

@Service
public class PostService {
    private final PostRepository postRepository;

    public PostService(PostRepository postRepository) {
        this.postRepository = postRepository;
    }

    public void createPost(PostDTO postDTO) {
        Post post = new Post();
        post.setTitle(postDTO.getTitle());
        post.setContent(postDTO.getContent());
        postRepository.save(post);
    }

    public PostDTO getPostById(Long id) {
        Post post = postRepository.findById(id);
        PostDTO postDTO = new PostDTO();
        postDTO.setId(post.getId());
        postDTO.setTitle(post.getTitle());
        postDTO.setContent(post.getContent());
        return postDTO;
    }

    public List<PostDTO> getAllPosts() {
        List<Post> posts = postRepository.findAll();
        List<PostDTO> postDTOs = new ArrayList<>();
        for (Post post : posts) {
            PostDTO postDTO = new PostDTO();
            postDTO.setId(post.getId());
            postDTO.setTitle(post.getTitle());
            postDTO.setContent(post.getContent());
            postDTOs.add(postDTO);
        }
        return postDTOs;
    }

    public void deletePost(Long id) {
        Post post = postRepository.findById(id);
        postRepository.delete(post);
    }
}

Controller:

@RestController
@RequestMapping("/posts")
public class PostController {
    private final PostService postService;

    public PostController(PostService postService) {
        this.postService = postService;
    }

    @PostMapping
    public void createPost(@RequestBody PostDTO postDTO) {
        postService.createPost(postDTO);
    }

    @GetMapping("/{id}")
    public ResponseEntity<PostDTO> getPostById(@PathVariable Long id) {
        PostDTO postDTO = postService.getPostById(id);
        if (postDTO != null) {
            return ResponseEntity.ok(postDTO);
        } else {
            return ResponseEntity.notFound().build();
        }
    }

    @GetMapping
    public List<PostDTO> getAllPosts() {
        return postService.getAllPosts();
    }

    @DeleteMapping("/{id}")
    public void deletePost(@PathVariable Long id) {
        postService.deletePost(id);
    }
}

 

위의 예제는 순수 JPA를 사용하여 게시판을 구현한 예제입니다.

 

DTO는 데이터 전송을 위해 사용되며, Repository는 데이터베이스와의 상호작용을 담당하는 인터페이스와 해당 인터페이스를 구현한 RepositoryImpl 클래스로 구성됩니다.

 

Service는 비즈니스 로직을 수행하고, Controller는 클라이언트의 요청을 처리하여 데이터를 전달합니다.

반응형

관련글 더보기

댓글 영역