본문 바로가기

Spring Boot

Chapter2 - DB 연결(JPA)

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