Spring boot 게시판 만들기

Goofi·2023년 8월 3일
0
post-custom-banner

controller 폴더

@GetMapping(), @RespnseBody

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

GetMapping("/") 은 어떤 URL로 접근할건지 지정해주는 어노테이션이다.
@responseBody는 설정한 GetMapping("/")에 접속(localhost:8080)에 접속했을 때 return에 해당하는 부분을 화면에 띄어줄 수 있는 어노테이션이다.

DB연결(MySql)

application.properties

server.port=8090

spring.jpa.hibernate.ddl-auto=update
spring.datasource.driverClassName=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/board
spring.datasource.username=root
spring.datasource.password=nanoqu12!!

@PostMapping()

Post요청시 사용한다.

<form action="/board/writepro" method="post">
    <input name="title" type="text">
    <textarea name="content"></textarea>
	<button type="submit">작성</button>
</form>
@PostMapping("/board/writepro")
public String boardWritePro(Board board){
//System.out.println(board.getTitle());
// board에서 선언한 title변수를 가져온다.
	boardService.write(board);
	return "";
}

form에서 적은action:"url"@PostMapping(url)에서 설정한 URL이랑 매칭되야 한다.

entity 폴더

entity폴더에 Board클래스는 DB테이블의 이름과 일치시켜주는게 좋다.

package com.study.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;
}

이렇게 Entity라고 하면 JPA가 Board 테이블에 관련한 설정이구나 하면서 처리를 해준다.

@Entity

  • Entity는 DB에 있는 테이블을 의미한다.
    JPA를 사용해 테이블과 매핑할 클래스에 붙여주는 어노테이션이다. 이 어노테이션을 붙임으로써 JPA가 해당 클래스를 관리하게 된다.

@Id

Primary 키를 의미한다.

데이터베이스 테이블의 기본 키(PK)와 객체의 필드를 매핑시켜주는 어노테이션입니다.

  • @Id어노테이션만 적게될 경우 기본키값을 직접 부여해줘야 한다.
  • 기본 키를 직접 할당하는 대신 데이터베이스가 생성해주는 값을 사용하려면 @GeneratedValue를 사용해주면 됩니다.

@GeneratedValue

@GeneratedValue(strategy = GenerationType.IDENTITY)
IDENTITY는 mySql은 mariadb에서 사용하는 것이다.

@GeneratedValue(strategy = GenerationType.SEQUENCE)
오라클에서 사용하는 것이다.

@GeneratedValue(strategy = GenerationType.AUTO)
자동지정

즉, 기본 키를 자동 생성해주는 어노테이션입니다.


repository 폴더

DB에 저장하기 위해서는 repository 폴더가 필요하다.


Form태그에서의 전송된 데이터를 Controller에서 처리하는 방법

boardwrite.html

<form action="/board/writepro" method="post">
	<input name="title" type="text">
	<textarea name="content"></textarea>
	<button type="submit">작성</button>
</form>

BoardController.java

@Controller
public class BoardController{
	@PostMapping("/board/writepro")
    public String boardWritePro(String title, String content){
    	
        return "";
    }
}

form 태그 안에 input, textarea의 name이 Controller에 있는 String title, String content 안에 들어간다.

하지만,

이게 많아지다보면 받아지기가 귀찮아진다.
그래서 Board라는 클래스를 만들었고 Entity를 만들었기 때문에 사용할 수 있다. 단 @Data 어노테이션을 입력해줘야 한다.

repository 폴더

@Service는 서비스라고 해주면 된다.
BoardService.java

public class BoardService{
	@Autowired
    private BoardRepository boardRepository;
    /*
    원래 자바 같은 경우
    BoardRepository boardRepository = new BoardRepository로 생성한다. 하지만, BoardRepository는 애초에 인터페이스라 객체를 생성할 수 없다.
    */
    public void write(Board board){
		boardRepository.save(board);
	}
}

스프링에 @Autowired 어노테이션을 사용하면 스프링빈이 알아서 읽어와서 private BoardRepository boardRepository; 요기다가 주입을 해준다. 이런걸 DI(Dependency Injection)라고 한다.

boardRepository에 save가 있다. entity(board 변수)를 안에 넣어준다.
그래서 Board 클래스에 board라는 변수를 넣어줘서 받아주고 save에 board를 넣어준다.

리스트

import java.util.List;

    public List<Board> boardList(){
        return boardRepository.findAll();
    }

findAll 메소드는 반환한다.

profile
오늘보단 내일이 강한 개발자입니다!🧑🏻‍💻
post-custom-banner

0개의 댓글