QueryMethod - 복잡한 WHERE 조건의 쿼리를 만드는 방법
1. Query return types
2. Query subject keywords
3. Query predicate keywords
출처 : https://docs.spring.io/spring-data/jpa/docs/current/reference/html/
User.java
/*
* Lombok 의 기능
* : @Getter, @Setter
* - 어노테이션을 클래스에 사용시 모든 필드에 대해서 setter(), getter() 선언됨
* - 어노테이션을 필드에 사용시 필드에 대해서 setter(), getter() 선언됨
* - 컴파일시 우측>리팩토링>Delombok에서 자동 setter(), getter() 자동 생성
* : @ToString
* - 어노테이션 사용으로 클래스에 필드 toString() 선언
* : @NoArgsConstructor
* - 인자가 없는 생성자(반드시 필요하여 항시 선언)
* : @AllArgsConstructor
* - 객체가 가지고 있는 모든 필드를 인자로 받는 생성자
* : @RequiredArgsConstructor
* - 필요한 인자만 가지고 만든 생성자
* : @NonNull
* - Lombok에서 제공, 해당 필드를 필수값으로 지정하여 @RequiredArgsConstructor 생성자를 사용
* : @EqualsAndHashCode
* - Equals(), HashCode()를 오버라이딩하여 사용한다는 어노테이션
* : @Data
* - Equivalent to @Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode.
* - 위의 어노테이션들을 합쳐놓은것과 동일하다.(만능 어노테이션으로 보이나, OOP원칙을 깨는 단점이 보임)
* : @Builder
* - @AllArgsConstructor와 비슷하게 객체를 생성하고 필드값을 주입해주는 빌더의 형식으로 제공
* : @Entity
* - ORM에서 DB테이블에서 객체와 연결해주기 위해 객체를 엔티티로 선언
* : @Id
* - 엔티티의 PK 선언
* : @GeneratedValue
* - 기본키를 순차적으로 숫자 증가
* : @OneToMany
* - 엔티티간의 관계를 표현
* (targetEntity) - 관계를 맺을 Entity클래스를 정의
* (cascade) - 현재의 엔티티의 변경에 대하여 관계를 맺은 엔티티도 변경 결정
* (fetch) - 관계엔티티를 읽는데 있어 즉시로딩, 지연로딩할지 결정, FetchType.EAGER, FetchType,LAZY
* (mappedBy) - 양방향관걔설정시 관계의 주체가 되는 쪽에 정의
* (orphanRemoval) - 관계엔티티에서 변경이 일어난 경우 DB변경을 할지 결정, cascade는 JPA레이어 단계
*/
@NoArgsConstructor
@AllArgsConstructor
@RequiredArgsConstructor
@Data
@Builder
@Entity
@Table(name = "TB_USER")
public class User{
@Id
@GeneratedValue
private Long id;
@NonNull
private String name;
@NonNull
private String email;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
@OneToMany(fetch = FetchType.EAGER)
private List<Address> address;
private Boolean useYn;
}
Address.java
@Entity
@Table(name = "TB_ADDR")
public class Address {
@Id
private Long id;
}
UserRepository.java
/* @Repository
* UserRepositoryTest 부분에서 @Autowired를 통해 의존성 주입해주었으므로 @Repository를 선언해주지않음
*/
public interface UserRepository extends JpaRepository<User,Long> {
/*
* 쿼리메소드를 통해 Select문 만들기
* Spring Data JPA에서 자유로운 명명규칙
* 해당 명명규칙으로 메소드를 만들어 select문을 만들 수 있다.
* 해당 where의 조건에 따라 가져오는 메소드를 만들 시 리턴타입을 명확하게 만들어야 한다. 여러개일 경우 List, Optional, ....등
* find..By, read..By, get..By, query..By, search..By, stream..By, find[Entity]By, find[SomethingNames]..By
* [Entity]의 경우 엔티티 속성의 값과 동일해야한다. 명명규칙이 잘못 만들어진 메소드의 경우 RuntimeException이 발생
*/
List<User> findByName(String name);
User findByEmail(String email);
User readByEmail(String email);
User getByEmail(String email);
User queryByEmail(String email);
User searchByEmail(String email);
User streamByEmail(String email);
User findUserByEmail(String email);
User findSomethingByEmail(String email);
/*
* 쿼리메소드의 select문 접두어에 붙여서 사용. First와 Top는 동일한 기능이고 용어의 차이이다.
* ex) findFirst1By..
* First<num>By..(), Top<num>By..()
*/
List<User> findFirst2ByName(String name);
List<User> findTop2ByName(String name);
/*
* AND, OR 조건
* 쿼리메소드의 ..And..(), ..Or..()을 붙여 사용
*/
List<User> findByEmailAndName(String email, String name);
List<User> findByEmailOrName(String email, String name);
/*
* > , < 조건
* ..By..After(), ..By..Before()
*/
List<User> findByCreatedAtAfter(LocalDateTime day);
List<User> findByCreatedAtBefore(LocalDateTime day);
List<User> findByIdAfter(Long id);
/*
* >, <, >=, <= 조건
* ..GreaterThan(), ..GreaterThanEqual(), ..LessThan()
*/
List<User> findByCreatedAtGreaterThan(LocalDateTime day);
List<User> findByCreatedAtLessThan(LocalDateTime day);
List<User> findByCreatedAtGreaterThanEqual(LocalDateTime day);
/*
* ? Between ? 조건
* ..Between(), ..GreaterThanEqualAnd..LessThanEqual()과 동일
*/
List<User> findByCreatedAtBetween(LocalDateTime beforeDay, LocalDateTime AfterDay);
List<User> findByIdBetween(Long id1, Long id2);
List<User> findByIdGreaterThanEqualAndIdLessThanEqual(Long id1, Long id2);
/*
* is not null 조건과 exists inner query조건
*/
List<User> findByIdIsNotNull();
//List<User> findByAddressIsNotEmpty();
/*
* IsTrue, IsFalse
*/
List<User> findByIdAndUseYnIsTrue(Long id);
List<User> findByIdAndUseYnIsFalse(Long id);
/*
* in 조건
*/
List<User> findByNameIn(List<String> name);
/*
* % 조건
* StartingWith, EndingWith, Contains -> Like
*/
List<User> findByNameStartingWith(String name);
List<User> findByNameEndingWith(String name);
List<User> findByNameContains(String name);
List<User> findByNameLike(String name);
/*
* order 조건
* OrderBy..Desc[Asc]
*/
List<User> findTopByName(String name);
List<User> findTopByNameOrderByIdDesc(String name);
List<User> findTopByNameOrderByIdAsc(String name);
List<User> findFirstByNameOrderByIdDescEmailDesc(String name);
List<User> findFirstByName(String name, Sort sort);
/*
* Paging
* Page는 페이징의 응답값, Pageable은 페이징의 요청값
* Page의 상위 클래스 Slice클래스의 메소드 참조
*/
Page<User> findByName(String name, Pageable pageable);
}
data.sql
call next value for hibernate_sequence;
insert into TB_USER values (1, current_timestamp,'martin@fastcampus.com', 'martin', current_timestamp, TRUE);
call next value for hibernate_sequence;
insert into TB_USER values (2, current_timestamp, 'dennis@fastcampus.com', 'dennis', current_timestamp, TRUE);
call next value for hibernate_sequence;
insert into TB_USER values (3, current_timestamp, 'sophia@slowcampus.com', 'sophia', current_timestamp, TRUE);
call next value for hibernate_sequence;
insert into TB_USER values (4, current_timestamp, 'james@slowcampus.com', 'james', current_timestamp, TRUE);
call next value for hibernate_sequence;
insert into TB_USER values (5, current_timestamp, 'martin@another.com', 'martin', current_timestamp, TRUE);
테스트 ( * 메소드가 동작할 때 실행되는 쿼리를 중점으로 확인 )
Select
// select
System.out.println(userRepository.findByName("martin"));
System.out.println("findByEmail : "+userRepository.findByEmail("martin@fastcampus.com"));
System.out.println("readByEmail : "+userRepository.readByEmail("martin@fastcampus.com"));
System.out.println("getByEmail : "+userRepository.getByEmail("martin@fastcampus.com"));
System.out.println("queryByEmail : "+userRepository.queryByEmail("martin@fastcampus.com"));
System.out.println("searchByEmail : "+userRepository.searchByEmail("martin@fastcampus.com"));
System.out.println("streamByEmail : "+userRepository.streamByEmail("martin@fastcampus.com"));
System.out.println("findUserByEmail : "+userRepository.findUserByEmail("martin@fastcampus.com"));
System.out.println("findSomethingByEmail : "+userRepository.findSomethingByEmail("martin@fastcampus.com"));
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.name=?
[User(id=1, name=martin, email=martin@fastcampus.com, createdAt=2022-10-15T02:39:38.664281, updatedAt=2022-10-15T02:39:38.664281, useYn=true), User(id=5, name=martin, email=martin@another.com, createdAt=2022-10-15T02:39:38.667572, updatedAt=2022-10-15T02:39:38.667572, useYn=true)]
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.email=?
findByEmail : User(id=1, name=martin, email=martin@fastcampus.com, createdAt=2022-10-15T02:39:38.664281, updatedAt=2022-10-15T02:39:38.664281, useYn=true)
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.email=?
readByEmail : User(id=1, name=martin, email=martin@fastcampus.com, createdAt=2022-10-15T02:39:38.664281, updatedAt=2022-10-15T02:39:38.664281, useYn=true)
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.email=?
getByEmail : User(id=1, name=martin, email=martin@fastcampus.com, createdAt=2022-10-15T02:39:38.664281, updatedAt=2022-10-15T02:39:38.664281, useYn=true)
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.email=?
queryByEmail : User(id=1, name=martin, email=martin@fastcampus.com, createdAt=2022-10-15T02:39:38.664281, updatedAt=2022-10-15T02:39:38.664281, useYn=true)
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.email=?
searchByEmail : User(id=1, name=martin, email=martin@fastcampus.com, createdAt=2022-10-15T02:39:38.664281, updatedAt=2022-10-15T02:39:38.664281, useYn=true)
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.email=?
streamByEmail : User(id=1, name=martin, email=martin@fastcampus.com, createdAt=2022-10-15T02:39:38.664281, updatedAt=2022-10-15T02:39:38.664281, useYn=true)
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.email=?
findUserByEmail : User(id=1, name=martin, email=martin@fastcampus.com, createdAt=2022-10-15T02:39:38.664281, updatedAt=2022-10-15T02:39:38.664281, useYn=true)
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.email=?
findSomethingByEmail : User(id=1, name=martin, email=martin@fastcampus.com, createdAt=2022-10-15T02:39:38.664281, updatedAt=2022-10-15T02:39:38.664281, useYn=true)
limit
System.out.println("findFirst1ByName : "+userRepository.findFirst2ByName("martin"));
System.out.println("findTop1ByName : "+userRepository.findTop2ByName("martin"));
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.name=? limit ?
findFirst1ByName : [User(id=1, name=martin, email=martin@fastcampus.com, createdAt=2022-10-15T02:40:51.554263, updatedAt=2022-10-15T02:40:51.554263, useYn=true), User(id=5, name=martin, email=martin@another.com, createdAt=2022-10-15T02:40:51.556593, updatedAt=2022-10-15T02:40:51.556593, useYn=true)]
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.name=? limit ?
findTop1ByName : [User(id=1, name=martin, email=martin@fastcampus.com, createdAt=2022-10-15T02:40:51.554263, updatedAt=2022-10-15T02:40:51.554263, useYn=true), User(id=5, name=martin, email=martin@another.com, createdAt=2022-10-15T02:40:51.556593, updatedAt=2022-10-15T02:40:51.556593, useYn=true)]
and, or
System.out.println("findByEmailAndName : "+userRepository.findByEmailAndName("martin@fastcampus.com","martin"));
System.out.println("findByEmailOrName : "+userRepository.findByEmailOrName("martin@fastcampus.com","dennis"));
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.email=?
and user0_.name=?
findByEmailAndName : [User(id=1, name=martin, email=martin@fastcampus.com, createdAt=2022-10-15T02:41:42.324129, updatedAt=2022-10-15T02:41:42.324129, useYn=true)]
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.email=?
or user0_.name=?
findByEmailOrName : [User(id=1, name=martin, email=martin@fastcampus.com, createdAt=2022-10-15T02:41:42.324129, updatedAt=2022-10-15T02:41:42.324129, useYn=true), User(id=2, name=dennis, email=dennis@fastcampus.com, createdAt=2022-10-15T02:41:42.325455, updatedAt=2022-10-15T02:41:42.325455, useYn=true)]
aftrer, before
// after, before
System.out.println("findByCreatedAtAfter : "+userRepository.findByCreatedAtAfter(LocalDateTime.now().minusDays(1L)));
System.out.println("findByCreatedAtBefore : "+userRepository.findByCreatedAtBefore(LocalDateTime.now().minusDays(1L)));
System.out.println("findByIdAfter : "+userRepository.findByIdAfter(1L));
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.created_at>?
findByCreatedAtAfter : [User(id=1, name=martin, email=martin@fastcampus.com, createdAt=2022-10-15T02:42:18.436726, updatedAt=2022-10-15T02:42:18.436726, useYn=true), User(id=2, name=dennis, email=dennis@fastcampus.com, createdAt=2022-10-15T02:42:18.438076, updatedAt=2022-10-15T02:42:18.438076, useYn=true), User(id=3, name=sophia, email=sophia@slowcampus.com, createdAt=2022-10-15T02:42:18.438427, updatedAt=2022-10-15T02:42:18.438427, useYn=true), User(id=4, name=james, email=james@slowcampus.com, createdAt=2022-10-15T02:42:18.438853, updatedAt=2022-10-15T02:42:18.438853, useYn=true), User(id=5, name=martin, email=martin@another.com, createdAt=2022-10-15T02:42:18.439188, updatedAt=2022-10-15T02:42:18.439188, useYn=true)]
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.created_at<?
findByCreatedAtBefore : []
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.id>?
findByIdAfter : [User(id=2, name=dennis, email=dennis@fastcampus.com, createdAt=2022-10-15T02:42:18.438076, updatedAt=2022-10-15T02:42:18.438076, useYn=true), User(id=3, name=sophia, email=sophia@slowcampus.com, createdAt=2022-10-15T02:42:18.438427, updatedAt=2022-10-15T02:42:18.438427, useYn=true), User(id=4, name=james, email=james@slowcampus.com, createdAt=2022-10-15T02:42:18.438853, updatedAt=2022-10-15T02:42:18.438853, useYn=true), User(id=5, name=martin, email=martin@another.com, createdAt=2022-10-15T02:42:18.439188, updatedAt=2022-10-15T02:42:18.439188, useYn=true)]
GreaterThan, LessThan, GreaterThanEqual
// GreaterThan, LessThan, GreaterThanEqual
System.out.println("findByCreatedAtGreaterThan : "+userRepository.findByCreatedAtGreaterThan(LocalDateTime.now().minusDays(1L)));
System.out.println("findByCreatedAtLessThan : "+userRepository.findByCreatedAtLessThan(LocalDateTime.now().minusDays(1L)));
System.out.println("findByCreatedAtGreaterThanEqual : "+userRepository.findByCreatedAtGreaterThanEqual(LocalDateTime.now().minusDays(1L)));
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.created_at>?
findByCreatedAtGreaterThan : [User(id=1, name=martin, email=martin@fastcampus.com, createdAt=2022-10-15T02:43:13.438520, updatedAt=2022-10-15T02:43:13.438520, useYn=true), User(id=2, name=dennis, email=dennis@fastcampus.com, createdAt=2022-10-15T02:43:13.440173, updatedAt=2022-10-15T02:43:13.440173, useYn=true), User(id=3, name=sophia, email=sophia@slowcampus.com, createdAt=2022-10-15T02:43:13.440489, updatedAt=2022-10-15T02:43:13.440489, useYn=true), User(id=4, name=james, email=james@slowcampus.com, createdAt=2022-10-15T02:43:13.440825, updatedAt=2022-10-15T02:43:13.440825, useYn=true), User(id=5, name=martin, email=martin@another.com, createdAt=2022-10-15T02:43:13.441117, updatedAt=2022-10-15T02:43:13.441117, useYn=true)]
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.created_at<?
findByCreatedAtLessThan : []
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.created_at>=?
findByCreatedAtGreaterThanEqual : [User(id=1, name=martin, email=martin@fastcampus.com, createdAt=2022-10-15T02:43:13.438520, updatedAt=2022-10-15T02:43:13.438520, useYn=true), User(id=2, name=dennis, email=dennis@fastcampus.com, createdAt=2022-10-15T02:43:13.440173, updatedAt=2022-10-15T02:43:13.440173, useYn=true), User(id=3, name=sophia, email=sophia@slowcampus.com, createdAt=2022-10-15T02:43:13.440489, updatedAt=2022-10-15T02:43:13.440489, useYn=true), User(id=4, name=james, email=james@slowcampus.com, createdAt=2022-10-15T02:43:13.440825, updatedAt=2022-10-15T02:43:13.440825, useYn=true), User(id=5, name=martin, email=martin@another.com, createdAt=2022-10-15T02:43:13.441117, updatedAt=2022-10-15T02:43:13.441117, useYn=true)]
Between
// Between
System.out.println("findByCreatedAtBetween : "+userRepository.findByCreatedAtBetween(LocalDateTime.now().minusDays(1L), LocalDateTime.now().plusDays(1L)));
System.out.println("findByIdBetween : "+userRepository.findByIdBetween(1L,3L));
System.out.println("findByIdGreaterThanEqualAndIdLessThanEqual : "+userRepository.findByIdGreaterThanEqualAndIdLessThanEqual(1L,3L));
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.created_at between ? and ?
findByCreatedAtBetween : [User(id=1, name=martin, email=martin@fastcampus.com, createdAt=2022-10-15T02:44:07.265504, updatedAt=2022-10-15T02:44:07.265504, useYn=true), User(id=2, name=dennis, email=dennis@fastcampus.com, createdAt=2022-10-15T02:44:07.266866, updatedAt=2022-10-15T02:44:07.266866, useYn=true), User(id=3, name=sophia, email=sophia@slowcampus.com, createdAt=2022-10-15T02:44:07.267232, updatedAt=2022-10-15T02:44:07.267232, useYn=true), User(id=4, name=james, email=james@slowcampus.com, createdAt=2022-10-15T02:44:07.267553, updatedAt=2022-10-15T02:44:07.267553, useYn=true), User(id=5, name=martin, email=martin@another.com, createdAt=2022-10-15T02:44:07.267850, updatedAt=2022-10-15T02:44:07.267850, useYn=true)]
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.id between ? and ?
findByIdBetween : [User(id=1, name=martin, email=martin@fastcampus.com, createdAt=2022-10-15T02:44:07.265504, updatedAt=2022-10-15T02:44:07.265504, useYn=true), User(id=2, name=dennis, email=dennis@fastcampus.com, createdAt=2022-10-15T02:44:07.266866, updatedAt=2022-10-15T02:44:07.266866, useYn=true), User(id=3, name=sophia, email=sophia@slowcampus.com, createdAt=2022-10-15T02:44:07.267232, updatedAt=2022-10-15T02:44:07.267232, useYn=true)]
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.id>=?
and user0_.id<=?
findByIdGreaterThanEqualAndIdLessThanEqual : [User(id=1, name=martin, email=martin@fastcampus.com, createdAt=2022-10-15T02:44:07.265504, updatedAt=2022-10-15T02:44:07.265504, useYn=true), User(id=2, name=dennis, email=dennis@fastcampus.com, createdAt=2022-10-15T02:44:07.266866, updatedAt=2022-10-15T02:44:07.266866, useYn=true), User(id=3, name=sophia, email=sophia@slowcampus.com, createdAt=2022-10-15T02:44:07.267232, updatedAt=2022-10-15T02:44:07.267232, useYn=true)]
isNotNull, exists inner query
// isnotnull, exists inner query
System.out.println("findByIdIsNotNull : "+userRepository.findByIdIsNotNull());
System.out.println("findByAddressIsNotEmpty : "+userRepository.findByAddressIsNotEmpty());
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.id is not null
Hibernate:
select
address0_.user_id as user_id1_2_0_,
address0_.address_id as address_2_2_0_,
address1_.id as id1_0_1_
from
tb_user_address address0_
inner join
tb_addr address1_
on address0_.address_id=address1_.id
where
address0_.user_id=?
Hibernate:
select
address0_.user_id as user_id1_2_0_,
address0_.address_id as address_2_2_0_,
address1_.id as id1_0_1_
from
tb_user_address address0_
inner join
tb_addr address1_
on address0_.address_id=address1_.id
where
address0_.user_id=?
Hibernate:
select
address0_.user_id as user_id1_2_0_,
address0_.address_id as address_2_2_0_,
address1_.id as id1_0_1_
from
tb_user_address address0_
inner join
tb_addr address1_
on address0_.address_id=address1_.id
where
address0_.user_id=?
Hibernate:
select
address0_.user_id as user_id1_2_0_,
address0_.address_id as address_2_2_0_,
address1_.id as id1_0_1_
from
tb_user_address address0_
inner join
tb_addr address1_
on address0_.address_id=address1_.id
where
address0_.user_id=?
Hibernate:
select
address0_.user_id as user_id1_2_0_,
address0_.address_id as address_2_2_0_,
address1_.id as id1_0_1_
from
tb_user_address address0_
inner join
tb_addr address1_
on address0_.address_id=address1_.id
where
address0_.user_id=?
findByIdIsNotNull : [User(id=1, name=martin, email=martin@fastcampus.com, createdAt=2022-10-15T02:46:44.763686, updatedAt=2022-10-15T02:46:44.763686, address=[], useYn=true), User(id=2, name=dennis, email=dennis@fastcampus.com, createdAt=2022-10-15T02:46:44.765392, updatedAt=2022-10-15T02:46:44.765392, address=[], useYn=true), User(id=3, name=sophia, email=sophia@slowcampus.com, createdAt=2022-10-15T02:46:44.765848, updatedAt=2022-10-15T02:46:44.765848, address=[], useYn=true), User(id=4, name=james, email=james@slowcampus.com, createdAt=2022-10-15T02:46:44.766239, updatedAt=2022-10-15T02:46:44.766239, address=[], useYn=true), User(id=5, name=martin, email=martin@another.com, createdAt=2022-10-15T02:46:44.766626, updatedAt=2022-10-15T02:46:44.766626, address=[], useYn=true)]
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
exists (
select
address2_.id
from
tb_user_address address1_,
tb_addr address2_
where
user0_.id=address1_.user_id
and address1_.address_id=address2_.id
)
findByAddressIsNotEmpty : []
isTrue, isFalse
// isTrue, isFalse
System.out.println("findByIdAndUseYnIsTrue : "+userRepository.findByIdAndUseYnIsTrue(1L));
System.out.println("findByIdAndUseYnIsFalse : "+userRepository.findByIdAndUseYnIsFalse(1L));
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.id=?
and user0_.use_yn=true
findByIdAndUseYnIsTrue : [User(id=1, name=martin, email=martin@fastcampus.com, createdAt=2022-10-15T02:48:23.704418, updatedAt=2022-10-15T02:48:23.704418, useYn=true)]
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.id=?
and user0_.use_yn=false
findByIdAndUseYnIsFalse : []
IN
// in
System.out.println("findByNameIn : "+userRepository.findByNameIn(Lists.newArrayList("martin","dennis")));
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.name in (
? , ?
)
findByNameIn : [User(id=1, name=martin, email=martin@fastcampus.com, createdAt=2022-10-15T02:49:02.283154, updatedAt=2022-10-15T02:49:02.283154, useYn=true), User(id=2, name=dennis, email=dennis@fastcampus.com, createdAt=2022-10-15T02:49:02.284610, updatedAt=2022-10-15T02:49:02.284610, useYn=true), User(id=5, name=martin, email=martin@another.com, createdAt=2022-10-15T02:49:02.285659, updatedAt=2022-10-15T02:49:02.285659, useYn=true)]
StartingWith, EndingWith, Contains - Like
// StartingWith, EndingWith, Contains -> Like
System.out.println("findByNameStartingWith : "+userRepository.findByNameStartingWith("mar"));
System.out.println("findByNameEndingWith : "+userRepository.findByNameEndingWith("tin"));
System.out.println("findByNameContains : "+userRepository.findByNameContains("ar"));
System.out.println("findByNameLike : "+userRepository.findByNameLike("%ar%"));
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.name like ? escape ?
findByNameStartingWith : [User(id=1, name=martin, email=martin@fastcampus.com, createdAt=2022-10-15T02:49:38.756423, updatedAt=2022-10-15T02:49:38.756423, useYn=true), User(id=5, name=martin, email=martin@another.com, createdAt=2022-10-15T02:49:38.760012, updatedAt=2022-10-15T02:49:38.760012, useYn=true)]
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.name like ? escape ?
findByNameEndingWith : [User(id=1, name=martin, email=martin@fastcampus.com, createdAt=2022-10-15T02:49:38.756423, updatedAt=2022-10-15T02:49:38.756423, useYn=true), User(id=5, name=martin, email=martin@another.com, createdAt=2022-10-15T02:49:38.760012, updatedAt=2022-10-15T02:49:38.760012, useYn=true)]
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.name like ? escape ?
findByNameContains : [User(id=1, name=martin, email=martin@fastcampus.com, createdAt=2022-10-15T02:49:38.756423, updatedAt=2022-10-15T02:49:38.756423, useYn=true), User(id=5, name=martin, email=martin@another.com, createdAt=2022-10-15T02:49:38.760012, updatedAt=2022-10-15T02:49:38.760012, useYn=true)]
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.name like ? escape ?
findByNameLike : [User(id=1, name=martin, email=martin@fastcampus.com, createdAt=2022-10-15T02:49:38.756423, updatedAt=2022-10-15T02:49:38.756423, useYn=true), User(id=5, name=martin, email=martin@another.com, createdAt=2022-10-15T02:49:38.760012, updatedAt=2022-10-15T02:49:38.760012, useYn=true)]
정렬 OrderBy
// OrderBy..Desc,Asc
System.out.println("findTopByName : "+userRepository.findTopByName("martin"));
System.out.println("findTopByNameOrderByIdDesc : "+userRepository.findTopByNameOrderByIdDesc("martin"));
System.out.println("findTopByNameOrderByIdAsc : "+userRepository.findTopByNameOrderByIdAsc("martin"));
System.out.println("findFirstByNameOrderByIdDescEmailDesc : "+userRepository.findFirstByNameOrderByIdDescEmailDesc("martin"));
System.out.println("findFirstByName : "+userRepository.findFirstByName("martin", Sort.by(Sort.Order.desc("id"),Sort.Order.desc("email"))));
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.name=? limit ?
findTopByName : [User(id=1, name=martin, email=martin@fastcampus.com, createdAt=2022-10-15T02:50:35.321427, updatedAt=2022-10-15T02:50:35.321427, useYn=true)]
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.name=?
order by
user0_.id desc limit ?
findTopByNameOrderByIdDesc : [User(id=5, name=martin, email=martin@another.com, createdAt=2022-10-15T02:50:35.325228, updatedAt=2022-10-15T02:50:35.325228, useYn=true)]
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.name=?
order by
user0_.id asc limit ?
findTopByNameOrderByIdAsc : [User(id=1, name=martin, email=martin@fastcampus.com, createdAt=2022-10-15T02:50:35.321427, updatedAt=2022-10-15T02:50:35.321427, useYn=true)]
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.name=?
order by
user0_.id desc,
user0_.email desc limit ?
findFirstByNameOrderByIdDescEmailDesc : [User(id=5, name=martin, email=martin@another.com, createdAt=2022-10-15T02:50:35.325228, updatedAt=2022-10-15T02:50:35.325228, useYn=true)]
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.name=?
order by
user0_.id desc,
user0_.email desc limit ?
findFirstByName : [User(id=5, name=martin, email=martin@another.com, createdAt=2022-10-15T02:50:35.325228, updatedAt=2022-10-15T02:50:35.325228, useYn=true)]
페이징 Paging
// Paging
System.out.println("findByName : "+userRepository.findByName("martin", PageRequest.of(0,2,Sort.by(Sort.Order.desc("id")))));
System.out.println("findByName : "+userRepository.findByName("martin", PageRequest.of(0,2,Sort.by(Sort.Order.desc("id")))).getContent());
System.out.println("findByName : "+userRepository.findByName("martin", PageRequest.of(0,2,Sort.by(Sort.Order.desc("id")))).getTotalElements());
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.name=?
order by
user0_.id desc limit ?
Hibernate:
select
count(user0_.id) as col_0_0_
from
tb_user user0_
where
user0_.name=?
findByName : Page 1 of 1 containing com.test.jpa.jpaProj.domain.User instances
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.name=?
order by
user0_.id desc limit ?
Hibernate:
select
count(user0_.id) as col_0_0_
from
tb_user user0_
where
user0_.name=?
findByName : [User(id=5, name=martin, email=martin@another.com, createdAt=2022-10-15T02:51:24.627517, updatedAt=2022-10-15T02:51:24.627517, useYn=true), User(id=1, name=martin, email=martin@fastcampus.com, createdAt=2022-10-15T02:51:24.620424, updatedAt=2022-10-15T02:51:24.620424, useYn=true)]
Hibernate:
select
user0_.id as id1_1_,
user0_.created_at as created_2_1_,
user0_.email as email3_1_,
user0_.name as name4_1_,
user0_.updated_at as updated_5_1_,
user0_.use_yn as use_yn6_1_
from
tb_user user0_
where
user0_.name=?
order by
user0_.id desc limit ?
Hibernate:
select
count(user0_.id) as col_0_0_
from
tb_user user0_
where
user0_.name=?
findByName : 2
'Spring > 1-3. JPA' 카테고리의 다른 글
(5. Spring Data JPA) Entity Listener 활용 (1) | 2022.10.18 |
---|---|
(4. Spring Data JPA) Entity의 기본속성(@Entity) (0) | 2022.10.17 |
(2. Spring Data JPA)JpaRepository의 findById와 getOne 차이 (0) | 2022.10.12 |
(1. Spring Data JPA)Spring Data JPA 정의 (1) | 2022.09.23 |
JPA(Java Persistence API) (0) | 2022.09.22 |