초급자를 위해 준비한
[백엔드, 웹 개발] 강의입니다.
JPA와 스프링 데이터 JPA의 기본 사용법을 알아봅니다.
✍️
이런 걸
배워요!
JPA 기본 매핑
스프링 데이터 JPA 기본 사용법
DB 연동의 열쇠 JPA!
실무 중심의 핵심 기본기를 빠르게 ????
백엔드 실무자를 위한
JPA & 스프링 데이터 JPA
인프런 강의
https://www.inflearn.com/course/jpa-spring-data-기초
유튜브
https://www.youtube.com/playlist?list=PLwouWTPuIjUi9Sih9mEci4Rqhz1VqiQXX
[4] Spring Data JPA
21. JPQL 소개
JPA를 쌩으로 사용하진 않음
・Spring Boot + Spring Data JPA (거의) 설정 없이 사용
자동 설정
persistence.xml
EntityManagerFactory
스프링 연동
스프링 트랜잭션 연동
EntityManager 연동
사용법
・spring-boot-starter-data-jpa 의존
필요한 설정 자동 처리
・스프링 부트 설정
・엔티티 단위로 Repository 인터페이스를 상속 받은 인터페이스 생성 또는 그 하위 인터페이스
•지정한 규칙에 맞게 메서드 추가
•필요한 곳에 해당 인터페이스 타입을 주입해서 사용
spring-boot-starter-data-jpa
•메이븐/그레이들 설정에 spring-boot-starter-data-jpa 의존 추가
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.0</version> <relativePath /> <!-- lookup parent from repository --> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> </dependencies>
스프링 부트 설정
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc: mysql://localhost/jpabegin? characterEncoding=utf8 spring.datasource.username=jpauser spring.datasource.password=j papass spring.datasource.hikari.maximum-pool-size=5 spring.jpa.database=mysql spring.jpa.open-in-view=false logging. level.org.hibernate.SQL=DEBUG
* '스프링 부트 버전에 따라 설정은 달라질 수 있으니 버전에 따른 문서 참고
엔티티 단위로 Repository 상속한 타입 추가
•Repository 인터페이스
• 스프링 데이터 JPA가 제공하는 특별한 타입으로
이 인터페이스를 상속한 인터페이스를 이용해 빈(bean) 객체를 생성
//T: 엔티티 타입 // ID: 엔티티의 식별자 타입 public interface Repository <T, ID> {}
import org.springframework.data.repository.Repository; public interface UserRepository extends Repository<User, String>{ }
규칙에 맞게 메서드 정의
• save(), findById(), delete()
public interface UserRepository extends Repository<User, String> { Optional<User> findById(String email); void save (User user); void delete (User user); }
@Service 리포지토리를 주입 받아 사용 public class NewUserService { private UserRepository userRepository; public NewUserService(UserRepository userRepository) {} this.userRepository = userRepository; @Transactional public void saveUser(SaveRequest saveRequest) {} Optional <User> userOpt = userRepository.findById(saveRequest.getEmail()); if (userOpt.isPresent()) throw new DupException(); User newUser = new User(saveRequest.getEmail(), saveRequest.getName(), LocalDateTime.now()); userRepository.save(newUser); }
22. Spring Data JPA 02 리포지터리 메서드 작성 규칙
★★23. Spring Data JPA 03 정렬 페이징 @Query
24. Spring Data JPA 04 Specification을 이용한 검색 조건 지정
Specifications (명세) 는
1) 코드를 해독하는데 있어서 어려움이 많아 쿼리가 조금이라도 복잡해지면 사용하기가 어렵다.
2) 생성해야 하는 Predicate 가 많아진다면 관리하기 어려워지고 직관적으로 이해하기 힘들다는 단점이 발생.
3) JPA Specification 와 Criteria 는 99% 사용 안하며, 대신에 QueryDSL을 사용한다.
25. Spring Data JPA 05 기타
댓글 ( 4)
댓글 남기기