[Spring] Boot와JPA(Mysql)을 이용한 Rest API 간단 예제
Spring Boot를 이용해 간단 Rest API를 만들어보자.
1. Spring Starter Project 설치
2. 아래와 같이 Spring Data JPA, MySQL Driver Check
3. application.properties
src/main/resources에 보면 application.properties파일이 있다.
application.properties = spring boot 설정 파일
application.properties에 JPA, Mysql을 설정해야한다.
아래와 같이 입력후 저장.
#spring boot 서버 주소와 포트 입력
server.address=localhost
server.port=1234
#콘솔에 SQL문을 출력해줄지 말지 결정
spring.jpa.show-sql=true
#DDL 데이터베이스 기능 사용
spring.jpa.generate-ddl=true
#Mysql
spring.jpa.database=mysql
#DBNAME = db이름, username, password입력
spring.datasource.url=jdbc:mysql://localhost:3306/DBNAME?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=(username)
spring.datasource.password=(password)
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
4. Entity 작성
데이터를 저장할 Entity클래스를 정의하자
※ 주의할점은 클래스 선언시 기본 생성자를 꼭 만들어야한다. 안그러면 오류가 난다.
class이름과 DB table이름을 맞춰야 한다. 만약 이름이 다르면 @Table(name="테이블 이름")어노테이션을 이용해 매핑해줘야한다.
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Entity
public class Board {
@Id @GeneratedValue
private Long id;
private String age;
private String name;
public Board() {
}
public Board(String name, String age) {
this.name = name;
this.age = age;
}
}
5. Repository 작성
Repository는 Spring에서 CRUD를 처리하는 인터페이스다.
아래와 같이 interface를 정의하고 아무런 기능을 구현하지 않고 CrudRepository에 구현된 기능을 모두 이용한다.
import org.springframework.data.repository.CrudRepository;
public interface BoardRepository extends CrudRepository<Board, Long>{
}
6. Controller 작성
이제 API를 처리할 Controller를 작성하자
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(value = "/board")
public class BoardController {
private BoardRepository boardRep;
@Autowired
public BoardController(BoardRepository boardRep) {
this.boardRep = boardRep;
}
//POST로 유저 추가
@PostMapping
public Board put(@RequestParam String name, @RequestParam String age) {
return boardRep.save(new Board(name, age));
}
//테이블 리스트 가져오기
@GetMapping
public Iterable<Board> list(){
return boardRep.findAll();
}
//id로 테이블 값 가져오기
@GetMapping(value = "/{id}")
public Optional<Board> findOne(@PathVariable Long id) {
return boardRep.findById(id);
}
//id로 테이블 값 수정
@PutMapping(value = "/{id}")
public Board update(@PathVariable Long id, @RequestParam String name, @RequestParam String age) {
Optional<Board> board = boardRep.findById(id);
board.get().setName(name);
board.get().setAge(age);
return boardRep.save(board.get());
}
//id로 테이블 값 삭제
@DeleteMapping
public void delete(@RequestParam Long id) {
boardRep.deleteById(id);
}
}
7. 실행
@SpringBootApplication
public class JpaApplication {
public static void main(String[] args) {
SpringApplication.run(JpaApplication.class, args);
}
}
이제 어플리케이션을 실행하면 아래와 같은 콘솔창이 띄어진다.
8. Postman을 통한 결과 확인