오늘 공부.
[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 |