스프링

 

초급자를 위해 준비한
[백엔드, 웹 개발] 강의입니다.

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 기타

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

about author

PHRASE

Level 60  라이트

만물은 성스러운 사랑에 의해 움직여진다. -단테

댓글 ( 4)

댓글 남기기

작성