@GetMapping("/")
@ResponseBody
public String main(){
return "Hello world";
}
GetMapping("/")
은 어떤 URL로 접근할건지 지정해주는 어노테이션이다.
@responseBody
는 설정한 GetMapping("/")
에 접속(localhost:8080)에 접속했을 때 return에 해당하는 부분을 화면에 띄어줄 수 있는 어노테이션이다.
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!!
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폴더에 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 테이블에 관련한 설정이구나 하면서 처리를 해준다.
Primary 키를 의미한다.
데이터베이스 테이블의 기본 키(PK)와 객체의 필드를 매핑시켜주는 어노테이션입니다.
@Id
어노테이션만 적게될 경우 기본키값을 직접 부여해줘야 한다.@GeneratedValue
를 사용해주면 됩니다.@GeneratedValue(strategy = GenerationType.IDENTITY)
IDENTITY는 mySql은 mariadb에서 사용하는 것이다.
@GeneratedValue(strategy = GenerationType.SEQUENCE)
오라클에서 사용하는 것이다.
@GeneratedValue(strategy = GenerationType.AUTO)
자동지정
즉, 기본 키를 자동 생성해주는 어노테이션입니다.
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
어노테이션을 입력해줘야 한다.
@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 메소드는 반환한다.