JPA 설정부터 CRUD까지

예원·2023년 6월 21일
0

Spring 글 모아보기

목록 보기
16/17

JPA란?

  • Java Persistence API 의 약자!
  • 자바 ORM 기술에 대한 표준 명세로, 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스

특징

  1. 객체 중심 개발이 가능하다.
  2. SQL 쿼리를 직접 생성하지 않고, JPA 메서드를 활용해 DB를 다루기 때문에 생산성이 증가된다.
  3. 유지보수가 용이하다.
  4. 객체와 관계형 DB와의 패러다임 불일치를 해결할 수 있다.
  5. 특정 DB에 종속적이지 않아 언제든지 바꿀 수 있다.

Dependency 설정

  • Maven
<dependencies>
  <dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-jpa</artifactId>
  </dependency>
<dependencies>
  • Gradle
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
}

DB 및 Logging 설정

  • application.properties
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver  // 여기서는 mariadb를 사용함
spring.datasource.url=jdbc:mariadb://{IP:PORT}/{DB_NAME}
spring.datasource.username={USER_NAME}
spring.datasource.password={PASSWORD}

#update the schema with the given values.
spring.jpa.hibernate.ddl-auto=update
#To beautify or pretty print the SQL
spring.jpa.properties.hibernate.format_sql=true
#show sql
spring.jpa.properties.hibernate.show-sql=true
#show parameter binding
logging.level.org.hibernate.type.descriptor.sql=DEBUG

logging.level.org.hibernate.SQL=DEBUG

도메인 객체 생성

@Entity
@Table(name = "cafe")
public class Cafe {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    @NonNull
    private String name;
    ...
}

Repository 생성

@Repository
public interface CafeRepository extends JpaRepository<Cafe, Integer> {
    
}

CRUD 작성

// Create - 생성
Cafe savedCafe = cafeRepository.save(cafe);

// Read - 조회
Optional<Cafe> OptionalCafe = cafeRepository.findById(id);
Cafe findCafe OptionalCafe.get();

// Update - 수정
Cafe cafe = cafeRepository.findById(id).get();
cafe.setName(newName);

// Delete - 삭제
cafeRepository.delete(cafe);

0개의 댓글