스프링 부트/[스프링 부트] 게시판 무작정 따라하기

[스프링 부트] 게시판 무작정 따라하기 - 1. 글 작성 처리

sungw00 2023. 3. 12. 13:25
728x90

DB연결

application.properties에 다음 내용 작성

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=1234
spring.datasource.url=jdbc:mysql://localhost:3306/board

BoardController 작성

package com.study2.board.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class BoardController {

    @GetMapping("/")
    @ResponseBody
    public String main() {
        return "Hello World";
    }
}

GET 메서드로 요청이 오면 "Hello World" 라는 글자를 그대로 띄워줄 수 있는 애노테이션이 @ResponseBody이다.

실행 결과


MySQL Workbench 실행 후 스키마, 테이블 생성

board 스키마와 board 테이블
board 테이블의 구조


엔티티는 테이블을 의미

게시글 번호, 제목, 내용 대로 엔티티를 생성

@ID는 PK를 의미, @GeneratedValue의 strategy(전략)은 IDENTITY는 mariadb, mysql / SEQUENCE는 oracle / AUTO는 자동 지정

package com.study2.board.entity;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.Data;

@Entity
@Data
public class Board {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String title;
    private String content;
}

boardWritePro 메서드의 매개 변수를 받는 양이 많아지게 되면 객체를 생성해서 객체를 전달하는 방법을 이용해 간단하게 작성할 수 있다.

package com.study2.board.controller;

import com.study2.board.entity.Board;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class BoardController {
    @GetMapping("/board/write") // localhost:8080/board/write 주소에 매핑
    public String boardWriteForm() {
        return "boardwrite"; // templates의 html 파일의 이름을 작성
    }

    @PostMapping("/board/writepro")
    public String boardWritePro(Board board) {
        System.out.println(board.getTitle());

        return "";
    }
}

실행해서 제목을 전달해보면 콘솔에 메시지가 출력된다.

 


DB에 글 작성 처리

BoardRepository 작성

JpaRepository를 상속받고 Generic으로 타입을 지정(첫 번째는 엔티티명, 두 번째는 PK의 자료형을 지정)

package com.study2.board.repository;

import com.study2.board.entity.Board;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface BoardRepository extends JpaRepository<Board, Integer> { // 엔티티는 Board, PK의 타입은 Integer
}

 

BoardService를 생성하고 BoardRepository를 주입받기

package com.study2.board.service;

import com.study2.board.entity.Board;
import com.study2.board.repository.BoardRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class BoardService {

    @Autowired
    private BoardRepository boardRepository;

    public void write(Board board) {

        boardRepository.save(board);
    }
}

 

BoardController에도 BoardService를 주입받기

package com.study2.board.controller;

import com.study2.board.entity.Board;
import com.study2.board.service.BoardService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class BoardController {

    @Autowired
    private BoardService boardService;

    @GetMapping("/board/write") // localhost:8080/board/write 주소에 매핑
    public String boardWriteForm() {
        return "boardwrite"; // templates의 html 파일의 이름을 작성
    }

    @PostMapping("/board/writepro")
    public String boardWritePro(Board board) {

        boardService.write(board);

        return "";
    }
}

localhost:8080/board/write 요청하여 내용 작성 후 버튼 클릭하면 DB에 저장되는 것을 확인할 수 있다.

728x90