본문 바로가기

컴퓨터공학/Spring & Hibernate

Spring> Spring Boot> REST CRUD API (Hibernate)

요구사항

직원 목록 갖고오기

직원 아이디로 직원 정보 갖고오기

새로운 직원 정보 생성

직원 정보 업데이트

직원 정보 삭제하기

 

 

REST API

HTTP Method CRUD Action
POST /api/employees 직원 정보 생성
GET /api/employees 직원 리스트 호출
GET /api/employees/{employeeId} 아이디로 직원 정보 호출
PUT /api/employees 직원 정보 업데이트
DELETE /api/employees/{employeeId} 직원 정보 삭제

 

 

개발 순서

1. 데이터베이스 개발 환경 구성

2. Spring Initializr로 Spring Boot 프로젝트 생성

3. 직원 리스트 호출

4. 직원 아이디로 직원 정보 호출

5. 새로운 직원 정보 생성

6. 직원 정보 업데이트

7. 직원 정보 삭제

 

어플리케이션 구조

 

 

 

1. 데이터베이스와 테이블 생성

CREATE DATABASE  IF NOT EXISTS `employee_directory`;
USE `employee_directory`;


DROP TABLE IF EXISTS `employee`;

CREATE TABLE `employee` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `first_name` varchar(45) DEFAULT NULL,
  `last_name` varchar(45) DEFAULT NULL,
  `email` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;


INSERT INTO `employee` VALUES 
	(1,'Leslie','Andrews','leslie@luv2code.com'),
	(2,'Emma','Baumgarten','emma@luv2code.com'),
	(3,'Avani','Gupta','avani@luv2code.com'),
	(4,'Yuri','Petrov','yuri@luv2code.com'),
	(5,'Juan','Vega','juan@luv2code.com');

2. Spring Initializr로 Spring Boot 프로젝트 생성

Spring Initializr

 

여기에 들어가서 

 

이와 같이 구성하고 Generate 버튼을 눌러준다.

 

 

cruddemo.zip
0.06MB

 

 

3. DAO 구성

Hibernate Session Factory 와 DataSource

이전에는 configuration을 XML 이나 JAVA 파일로 손수 설정했다.

Spring boot는 그럴 필요 없음. DataSource를 자동으로 설정한다. 

 

pom.xml을 보면

JDBC Driver는 mysql-connector-java

Spring Data (ORM)은 spring-boot-starter-data-jpa 

 

DB 연결 정보는 application.properties 파일에 있다.

 

 

 

JPA (Java Persistence API)

Object to Relational Mapping (ORM) 을 위한 standard API

인터페이스 모음이고 사용하기 위해선 구현이 필요하다.

Hibernate가 바로 구현한 것이다.  구현한 것들을 JPA Vendor라고 부른다.

 

스프링부트에서 Hibernate는 JPA 의 기본 구현이다. 

EntityManager는 Hibernate Session Factory와 비슷하다.

EntityManager 는 Hibernate Session Object에 대해서 wrapper가 될 수 있다.

DAO에 EntityManager 를 주입할 수 있다. 

 

 

순서

1) DB config 를 application.properties 에 적는다.

2) Employee entity 생성

3) DAO interface 생성

4) DAO 구현

5) Rest Controller에서 DAO 사용

 

 

1) DB config 를 application.properties 에 적는다.

application.properties에 다음과 같은 내용 작성한다. 

스프링부트는 자동으로 DataSource 와 EntityManager를 위한 bean을 만들 것이다.

 

 

 

2) Employee entity 생성

 

 

constructor는 두 개 만들어 준다.

arg가 없는 건 hibernate에서 필요하기 때문이다.

 

사진은 없지만 getter/setter를 생성해주고

toString도 만들어 준다.

Entity 구성 완료

 

3) DAO interface 생성

entity 패키지를 만든 것처럼 dao 패키지를 만들고 인터페이스를 만든다. 

 

 

4) DAO 구현

 

복습

@Transactional은 transaction 관리를 다룬다.

시작과 commit transaction을 수동으로 조작하지 않아도 된다.

 

 

findAll 메서드의 내용은 다음과 같다.

1. hibernate 세션을 가져온다.

2. 쿼리를 만든다.

3. 쿼리를 실행하고 결과물을 가져온다.

4. 결과물을 반환한다.

 

세션도 아무거나 불러오지 말고 

org.hibernate.Session으로 불러야 함

 

 

다시 말하지만 entityManager가 wrapper 역할을 한다.

entityManager로 세션을 가져온다.

 

 

 

5) Rest Controller에서 DAO 사용

 

생성자 주입을 사용하여 dao를 주입한다. 

 

 

 

 

정리하자면

application.properties 에  있는 datasource를 참조하여 DB 유저 아이디, 비밀번호를 가져와 접근한다.

세션펙토리 역할을 하는 EntityManager 로 세션을 가져와서 쿼리를 만들고 결과값을 가져와야 하는데

entity 클래스에 있는 테이블과 칼럼을 보고 클래스 필드값에 집어 넣는다.

클래스의 리스트를 dao에서 반환하고 controller는 이걸 받아 유저에게 반환한다.