STUDY LOG

230726 STUDY LOG.

우진하다 2023. 7. 27. 00:52

오늘 공부.

[BE] 스프링 강의 수강 및 정리

Chapter 04. 날씨 데이터 CRUD


[자료구조/알고리즘] 삽입정렬관련 문제 풀이 및 정리 / 프로그래머스 풀기

오늘 정리.

Spring Data JPA에서는 JpaRepository를 통해 쿼리를 생성하는 데에 두 가지 방법을 주로 사용

메서드 이름으로 쿼리 생성
메서드 이름의 규칙을 따르면 Spring Data JPA가 자동으로 쿼리를 생성해줍니다.
이 방법은 간단한 쿼리에 적합하며, 복잡한 쿼리를 작성하는 데에는 한계가 있다.

Person 엔티티에 대한 repository 인터페이스를 보면 다음과 같이 메서드를 정의할 수 있다.

public interface PersonRepository extends JpaRepository<Person, Long> {
    List<Person> findByName(String name);
}

findByName 메서드는 내부적으로 SELECT p FROM Person p WHERE p.name = :name와 같은 JPQL 쿼리를 생성

@Query 어노테이션을 사용하는 방법
복잡한 쿼리를 작성하거나, 메서드 이름으로 쿼리를 표현하기 어려울 때 @Query 어노테이션을 사용하여 JPQL이나 SQL을 직접 작성할 수 있음

public interface PersonRepository extends JpaRepository<Person, Long> {
    @Query("SELECT p FROM Person p WHERE p.name = :name AND p.age > :age")
    List<Person> findByNameAndAgeGreater(@Param("name") String name, @Param("age") int age);
}

findByNameAndAgeGreater 메서드는 @Query 어노테이션을 통해 직접 JPQL 쿼리를 작성

 

JpaRepository<Person, Long> 는 무엇을 의미하나?

JpaRepository 인터페이스의 제네릭 타입이며 각각 엔티티 타입과 엔티티의 ID 타입

현재 강의에서는 id 타입이 int형이고 엔티티 타입은 Diary

@Entity
@Getter
@Setter
@NoArgsConstructor
public class Diary {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String weather;
    private String icon;
    private double temperature;
    private String text;
    private LocalDate date;

}

 

@NoRepositoryBean
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {

		//.....


}

<T, ID>에 맞는 엔티티타입 Diardy 과 id Integer 써야됨

정리하면
<Diary, Integer>에 있는 Diary과 Integer는 JpaRepository 인터페이스의 제네릭 타입이며
각각 엔티티 타입과 엔티티의 ID 타입을 나타낸다.

Diary
paRepository가 작업을 수행하는 대상 엔티티의 타입 Diary이라는 엔티티 클래스가 있고 이에 대한 CRUD 작업을 JpaRepository가 수행한다면, 이 타입은 Diary으로 설정

Integer
엔티티의 ID 필드의 타입이며 Diary 엔티티의 ID 필드 타입이 Integer라면, 이 타입은 Integer으로 설정
Long이면 <Diary, Long>

따라서 public interface DiaryRepository extends JpaRepository<Diary, Integer>라는 선언은 Diary 엔티티에 대해 Integer 타입의 ID를 사용하는 repository를 정의하는 것
이 Repository를 통해 Diary 엔티티에 대한 CRUD 작업을 수행할 수 있게 된다.

 

오늘 후기.

스프링부트 웹 MVC 흐름이 조금조금 보인다.
그래도 아직 낯선 어노테이션과 에러를 마주할 때면 넘모 힘들다.

오늘은 JSON 파싱을 쉽게할 수 있는 것도 배웠는데
이부분도 정리가 한 번 필요할듯 하다.

내일은 완강하고 추가 기능 구현에 들어갈 수 있길!
내일은 코테 50점 넘기기!

오늘도 끗, 내일도 힘힘힘!

'STUDY LOG' 카테고리의 다른 글

230728 STUDY LOG.  (1) 2023.07.28
230727 STUDY LOG.  (0) 2023.07.28
230724 STUDY LOG.  (0) 2023.07.25
230723 STUDY LOG.  (0) 2023.07.24
230722 STUDY LOG.  (0) 2023.07.23