[인프런 워밍업 클럽 스터디] 7일차 - Spring Data JPA를 사용한 데이터베이스

image

Section 4. 생애 최초 JPA 사용하기

[목표]

  1. 문자열 SQL을 직접 사용하는 것의 한계를 이해하고, 해결책인 JPA, Hibernate, Spring Data JPA가 무엇인지 이해한다.

  2. Spring Data JPA를 이용해 데이터를 생성, 조회, 수정, 삭제할 수 있다.

  3. 트랜잭션이 왜 필요한지 이해하고, 스프링에서 트랜잭션을 제어하는 방법을 익힌다.

  4. 영속성 컨텍스트와 트랜잭션의 관계를 이해하고, 영속성 컨텍스트의 특징을 알아본다.


[SQL을 직접 작성하면 아쉬운 점]

  1. 문자열을 작성하기 때문에 실수할 수 있고, 실수를 인지하는 시점이 느리다.

  2. 특정 데이터베이스에 종속적이게 된다.

  3. 반복 작업이 많아진다. 테이블을 하나 만들 때 마다 CRUD 쿼리가 항상 필요하다.

  4. 데이터베이스의 테이블과 객체는 패러다임이 다르다.

===> 그렇기 때문에 등장한 것이 JPA(Java Persistence API)

 

[JPA란?]

객체와 관계형 DB의 테이블을 짝지어 데이터를 영구적으로 저장할 수 있도록 정해진 Java 진영의 규칙

이것을 코드로 구현한 것이 Hibernate. Hibernate는 JDBC를 내부적으로 사용한다.

 

[JPA 어노테이션]

@Entity : 스프링이 User 객체와 user 테이블을 같은 것으로 바라본다.  기본생성자 꼭 필요함.

@Id : 이 필드를 primary key로 간주한다.

@GeneratedValue : primary key는 자동 생성되는 값이다.

@Column : 객체의 필드와 Table의 필드를 매핑한다. 이름이 같을 시 생략 가능.

 

[spring.jpa.hibernate.ddl-auto]

create: 기존 테이블이 있다면 삭제 후 다시 생성

create-drop: 스프링이 종료될 때 테이블을 모두 제거

update: 객체와 테이블이 다른 부분만 변경

validate: 객체와 테이블이 동일한지 확인

none: 별다른 조치를 하지 않는다

 

[지금까지 사용한 JPA Repository 기능]

save: 주어지는 객체를 저장하거나 업데이트 시켜준다.

findAll: 주어지는 객체가 매핑된 테이블의 모든 데이터를 가져온다.

findById: id를 기준으로 특정한 1개의 데이터를 가져온다.

 

[Spring Data JPA]

복잡한 JPA 코드를 스프링과 함께 쉽게 사용할 수 있도록 도와주는 라이브러리

 

[JPA Repository에서 By 앞에 들어갈 수 있는 구절 정리]

find: 1건을 가져온다. 반환 타입은 객체가 될 수도 있고, Optional<타입>이 될 수도 있다.

findAll: 쿼리의 결과물이 N개인 경우 사용. List<타입> 반환.

exists: 쿼리 결과가 존재하는지 확인. 반환 타입은 boolean.

count: SQL의 결과 개수를 센다. 반환 타입은 long.

 

[JPA Repository에서 By 뒤에 들어갈 수 있는 구절 정리]

GraterThan: 초과

GraterThanEqual: 이상

LessThan: 미만

LessThanEqual: 이하

Between: 사이에

StartsWith: ~로 시작하는

EndsWith: ~로 끝나는

 

 

[과제]

진도표 7일차와 연결됩니다

우리는 JPA라는 개념을 배우고 유저 테이블에 JPA를 적용해 보았습니다. 몇 가지 문제를 통해 JPA를 연습해 봅시다! 🔥

 

댓글을 작성해보세요.