1. build.gradle 수정
- 아래와 같이 의존성을 추가합니다.
dependencies {
annotationProcessor(
"org.projectlombok:lombok",
)
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'mysql:mysql-connector-java:5.1.49'
implementation 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
lombok | Lombok은 Getter나 Setter, 생성자와 같이 반복적으로 사용되는 메소드를 Annotation을 사용해서 자동으로 작성해주는 기능을 제공 |
mysql-connector-java | MySQL 데이터베이스와의 연결을 지원하는 JDBC 드라이버를 제공 |
spring-boot-starter-data-jpa | Spring Data JPA와 Hibernate를 포함한 필수 라이브러리들을 제공 - Spring Data JPA: 데이터 액세스 계층을 구현하기 위한 기술을 제공 - Hibernate: 자바 언어로 된 객체와 데이터베이스 테이블과 매핑(ORM)하는 기술을 제공 |
2. application.properties 설정
- DB는 Docker로 MySQL 컨테이너를 띄워서 사용할 예정입니다. 자세한 내용은 해당 글을 참고해주세요.
- 해당 DB에는 MySQL의 샘플용 데이터 sakila가 import되어 있습니다.
- application.properties에 MySQL연결 정보를 입력합니다.
spring.datasource.url=jdbc:mysql://localhost:3306/sakila?useSSL=false
spring.datasource.username=root
spring.datasource.password=1q2w3e4r!
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
3. Entity
- Film.java를 생성하고 아래와 같이 작성합니다.
package com.example.filmservice;
import java.time.LocalDateTime;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.Getter;
@Entity
@Getter
@Table(name = "film")
public class Film {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "film_id")
private Integer id;
@Column(name = "title")
private String title;
@Column(name = "description")
private String description;
@Column(name = "release_year")
private Integer releaseYear;
@Column(name = "language_id")
private Integer languageId;
@Column(name = "original_language_id")
private Integer originalLanguageId;
@Column(name = "rental_duration")
private Integer rentalDuration;
@Column(name = "rental_rate")
private Double rentalRate;
@Column(name = "length")
private Integer length;
@Column(name = "replacement_cost")
private Double replacementCost;
@Column(name = "rating")
private String rating;
@Column(name = "special_features")
private String specialFeatures;
@Column(name = "last_update")
private LocalDateTime lastUpdate;
}
@Entity | 클래스가 JPA 엔티티임을 나타내며, JPA가 해당 클래스를 관리. |
@Getter | Getter 메소드를 자동으로 생성 |
@Table | 엔터티 클래스와 매핑되는 테이블을 지정. |
@Id | 엔터티 클래스의 primary key를 지정. |
@GeneratedValue | 자동으로 값이 생성되어야 하는 경우 사용. |
@Column | 필드와 데이터베이스 컬럼을 매핑. |
@Temporal | 날짜 및 시간 타입의 필드를 매핑. TemporalType.TIMESTAMP는 날짜와 시간을 모두 매핑 |
4. Repository interface
- JpaRepository는 CRUD(Create, Read, Update, Delete) 작업에 필요한 메소드들을 제공하는 인터페이스입니다.
- FilmRepository는 JpaRepository를 확장하여, Film 엔티티와 관련된 데이터베이스와의 상호 작용을 담당합니다. 즉, Film 엔티티에 대한 CRUD(Create, Read, Update, Delete) 작업이 가능해집니다.
package com.example.filmservice;
import org.springframework.data.jpa.repository.JpaRepository;
public interface FilmRepository extends JpaRepository<Film, Long> {
}
5. Service, controller
- service를 아래와 같이 작성합니다.
package com.example.filmservice;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class FilmService {
@Autowired
private FilmRepository filmRepository;
public List<Film> getAllFilms() {
return filmRepository.findAll();
}
public Film getFilmById(Integer id) {
return filmRepository.findById(id).orElse(null);
}
}
- controller를 아래와 같이 작성합니다.
package com.example.filmservice;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/films")
public class FilmController {
@Autowired
private FilmService filmService;
@GetMapping
public List<Film> getAllFilms() {
return filmService.getAllFilms();
}
@GetMapping("/{id}")
public Film getFilmById(@PathVariable Integer id) {
return filmService.getFilmById(id);
}
}
- App을 실행하고 localhost:8080/api/films에 접속하면 아래와 같은 화면을 확인 할 수 있습니다.
'Spring Boot' 카테고리의 다른 글
Chapter1 - 프로젝트 생성 (0) | 2023.11.08 |
---|