본문 바로가기

프로그래밍/Spring

[Spring Boot] H2, JPA로 Rest API 만들기

1. Goal 

 - Spring boot web, H2 Database, JPA 를 사용해보기

 - 간단한 REST API 만들기

 - H2 web console 접속해보기


2. 세팅하기

0) main Class

 - 프로젝트 생성하면 알아서 생성해준다.

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class H2JpaApplication {

public static void main(String[] args) {
SpringApplication.run(H2JpaApplication.class, args);
}
}

1) pom.xml

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- jpa -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- h2 database -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
</dependencies>

2) application.yml

# Database Settings
spring:
datasource:
url: jdbc:h2:mem:h2_jpa_sample;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
platform: h2
username: sa
password:
driverClassName: org.h2.Driver
jpa:
database-platform: org.hibernate.dialect.H2Dialect
hibernate:
ddl-auto: update
properties:
hibernate:
show_sql: true
use_sql_comments: true
format_sql: true

# H2 Settings
h2:
console:
enabled: true
path: /console
settings:
trace: false
web-allow-others: false

3) Entity Class

import javax.persistence.*;
import java.io.Serializable;

/**
* Book Entity
*
* @author akageun
*/
@Entity
@Table(name = "book")
public class BookEntity implements Serializable {
private static final long serialVersionUID = 810457109758530244L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(length = 50)
private String name;
private int price;

@Lob
@Column
private String desc;

public BookEntity() {
}

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getPrice() {
return price;
}

public void setPrice(int price) {
this.price = price;
}

public String getDesc() {
return desc;
}

public void setDesc(String desc) {
this.desc = desc;
}
}

4) DAO Class

import kr.geun.sample.entity.BookEntity;
import org.springframework.data.repository.CrudRepository;

/**
* BOOK DAO
*
* @author akageun
*/
public interface BookDAO extends CrudRepository<BookEntity, Long> {
}


5) Controller Class

import kr.geun.sample.dao.BookDAO;
import kr.geun.sample.entity.BookEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.transaction.Transactional;

/**
* WEB Rest Controller
*
* @author akageun
*/
@RestController
public class WebController {

@Autowired
private BookDAO bookDAO;

/**
* Get All Book Data
*
* @return
*/
@GetMapping("/book/list")
public Iterable<BookEntity> getList() {
return bookDAO.findAll();
}

/**
* View specific Book by id
*
* @param id
* @return
*/
@GetMapping("/book/{id}")
public BookEntity getDetail(@PathVariable Long id) {
return bookDAO.findOne(id);
}

/**
* New Book Data
*
* @param param
* @return
*/
@Transactional
@PostMapping("/book")
public BookEntity addBook(BookEntity param) {
return bookDAO.save(param);
}

/**
* Modify Book Data
*
* @param param
* @return
*/
@Transactional
@PutMapping("/book/{id}")
public BookEntity modifyBook(BookEntity param) {
return bookDAO.save(param);
}

/**
* Delete Book Data
*
* @param id
* @return
*/
@Transactional
@DeleteMapping("/book/{id}")
public String deleteBook(@PathVariable Long id) {
bookDAO.delete(id);
return "SUCCESS";
}
}

6) data.sql

 - src/main/resources 하위에 data.sql을 만들어놓으면 초기화시에 해당 sql파일 내에 있는 쿼리들을 실행시켜준다.

INSERT INTO book (`id`, `name`, `price`, `desc`) VALUES (1, 'Book no 1', 5000, 'This is Sample Book');


3. 동작 확인해보기

 - Rest Client인 'POSTMAN'으로 호출하였다.


1) 리스트 

 - 응답데이터 내용을 확인해보면 위에 data.sql이 잘 추가되어 있는걸 볼 수 있다.


2) 추가

 - POST 로 호출 한 다음 위 '리스트' API를 호출해보니, 잘 저장되어 있다.

- 리스트 API 호출 


3) 상세보기

 - 방금 전 저장한 데이터를 조회해보자.



4) 수정

 - 추가 입력했던 id가 2번인 데이터를 수정해보자


5) 삭제

 - 2번 글을 삭제해보자



4. Web Console 접속해보기

 - http://localhost:8080/console

 - 해당 페이지에서 언어선택도 변경할 수 있다.

 - 접속해보자


- 생성한 BOOK 테이블이 보인다. 



5. 결론

 - jpa를 사용하면 간단한 CRUD 만드는건 정말 편하다.

 - H2 database를 개발환경에서 사용하면, 편리하다.


6. 소스

 https://github.com/akageun/spring_boot_sample/tree/master/h2_jpa