[내일배움캠프] #211114 💻 TIL 💻

이수영·2021년 11월 15일
0

MY TIL 

목록 보기
35/50

📚 Springboot

✍🏻 글 저장 (Create)

📌 DTO

클라이언트에서 전송한 데이터를 서버에서 사용하기위해 DTO 객체로 바꾸어야한다

📌 Ajax

  • 일반 웹페이지 요청은 전체 페이지를 다 읽어야하는 낭비가 발생하지만 , ajax를 사용하면 정확히 해당 데이터만 읽고 바꿀 수 있다.
  • JSON이란 데이터를 자바스크립트 객체로 표현한 것으로 client에서 JSON 객체로 ajax 요청을 하면 서버가 DTO객체로 바꾸어서 controller가 요청을 받아 작동한다

📌 API Controller

  • 서버데이터를 JSON 에 담아 API로 주고받는 컨트롤러
  • @RestController

📌 JPA

  • 데이터를 저장하려면 DB에 넘겨야하는데 서로 사용하는 언어가 다르므로 직접 데이터를 넘기기가 쉽지않다 . 이를 위한 라이브러리가 JPA이다.
    이 작동은 레포지토리가 한다.

📌 Entity Class

  • 레포지토리가 DB와 데이터를 주고 받으려면 알맞은 데이터 규격이 필요
    이를 entity 라고 한다

📖 Source Code

✔ BoardDto

package com.sparta.springtest.dto;

import com.sparta.springtest.domain.entity.Board;
import lombok.*;

import java.time.LocalDateTime;

@Getter
@Setter
@ToString
@NoArgsConstructor
public class BoardDto {
    //폼데이터를 서버에서 사용하려면 객체로 만들어야하고 이를위해 DTO필요
    // 클라이언트가 보낸 정보를 DTO라는것으로 만들어서 컨트롤러에 보냄
    private Long id;

    private String title;


    public Board toEntity() { //폼데이터를 갖는 DTO를 Entity로 바꾼다
        Board build = Board.builder()
                .id(id)
                .title(title)

                .build();
        return build;
    }
    @Builder
    public BoardDto(Long id, String title) {
        this.id = id;

        this.title = title;


    }

✔ Boardcontroller

package com.sparta.springtest.controller;

import com.sparta.springtest.domain.entity.Board;
import com.sparta.springtest.dto.BoardDto;
import com.sparta.springtest.repository.BoardRepository;

import com.sparta.springtest.service.BoardService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;


@Controller
public class Boardcontroller {
    private BoardService boardService;

    public Boardcontroller(BoardService boardService) {
        this.boardService = boardService;
    }

    @GetMapping("/")
    public String list(Model model) {
        List<BoardDto> boardDtoList = boardService.getBoardList();
        model.addAttribute("postList", boardDtoList); //모델(클라이언트) 에 붙힘
        return "index"; //서버사이드렌더링과 비슷한 개념
    }

    @GetMapping("/post")
    public String post() {
        return "index";
    }

    @PostMapping("/post")
    public String write(BoardDto boardDto) {
        boardService.savePost(boardDto);
        return "redirect:/";
    }

}

✔ BoardService

package com.sparta.springtest.service;
import com.sparta.springtest.domain.entity.Board;
import com.sparta.springtest.dto.BoardDto;
import com.sparta.springtest.repository.BoardRepository;
import org.springframework.stereotype.Service;

import javax.transaction.Transactional;
import java.util.ArrayList;
import java.util.List;

@Service
public class BoardService {
    private BoardRepository boardRepository;

    public BoardService(BoardRepository boardRepository) {
        this.boardRepository = boardRepository;
    }

    @Transactional
    public Long savePost(BoardDto boardDto) {
        return boardRepository.save(boardDto.toEntity()).getId();
        //DB와 
    }

    @Transactional
    public List<BoardDto> getBoardList() {
        List<Board> boardList = boardRepository.findAll();
        List<BoardDto> boardDtoList = new ArrayList<>();

        for(Board board : boardList) {
            BoardDto boardDto = BoardDto.builder()
                    .id(board.getId())
                    .title(board.getTitle())
                    .build();
            boardDtoList.add(boardDto);
        }
        return boardDtoList;
    }


}


✔ Board (DB에서 사용하기 위해 Dto를 entity로 바꿈)

package com.sparta.springtest.domain.entity;

import com.sparta.springtest.domain.Timestamped;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import javax.persistence.*;

@Setter
@Getter // get 함수를 일괄적으로 만들어줍니다.
@NoArgsConstructor // 기본 생성자를 만들어줍니다.
@Entity // DB 테이블 역할을 합니다.
public class Board extends Timestamped {

    // ID가 자동으로 생성 및 증가합니다.
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Id
    private Long id;

    // 반드시 값을 가지도록 합니다.
    @Column(nullable = false)
    private String title;

    @Builder
    public Board(Long id,String title) {
        this.id = id;

        this.title = title;

    }

✔ BoardRepostiory

package com.sparta.springtest.repository;


import com.sparta.springtest.domain.entity.Board;
import org.springframework.data.jpa.repository.JpaRepository;

public interface BoardRepository extends JpaRepository<Board, Long> {
}

출처: cloudstudying

profile
Hongik Univ 💻

0개의 댓글