JPA란?
- Java Persistence API 의 약자!
- 자바 ORM 기술에 대한 표준 명세로, 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스
특징
- 객체 중심 개발이 가능하다.
- SQL 쿼리를 직접 생성하지 않고, JPA 메서드를 활용해 DB를 다루기 때문에 생산성이 증가된다.
- 유지보수가 용이하다.
- 객체와 관계형 DB와의 패러다임 불일치를 해결할 수 있다.
- 특정 DB에 종속적이지 않아 언제든지 바꿀 수 있다.
Dependency 설정
<dependencies>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
</dependency>
<dependencies>
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
}
DB 및 Logging 설정
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 작성
Cafe savedCafe = cafeRepository.save(cafe);
Optional<Cafe> OptionalCafe = cafeRepository.findById(id);
Cafe findCafe OptionalCafe.get();
Cafe cafe = cafeRepository.findById(id).get();
cafe.setName(newName);
cafeRepository.delete(cafe);