
굉장히 귀찮지만..
오늘도 해야만 한다...
No shibal keep going...

1. JPQL
테이블이 아닌 엔티티 객체를 대상으로 사용되는 객체지향 쿼리이다.
2. 쿼리메소드
이전에 JPA를 공부하다 보면 기본으로 제공되는 메소드 말고는 사용할 수 없나 하고 궁금증이 생겼었다.
역시나.. 있었다.
Repository 내 정의되는 메소드의 이름만으로 쿼리를 생성할 수 있고,
규칙에 맞게 이름을 지으면 그에 맞는 쿼리가 자동으로 생성된다.
크게 주제와 서술어로 구분되며 find, exists 등으로 시작되면 by뒤에는 서술어(검색이나 정렬조건)가 붙는다.
1. find...by, read...by, get...by, query...by : 조회하는 키워드이며, 리턴타입을 설정할 수 있다.
('...' 영역은 엔티티를 나타내며 이미 정의하는 경우 생략이 가능하다.)
2. exists...by : 특정 데이터가 존재하는지 확인하는 키워드이다.
3. count...by : 조회 쿼리를 수행한 후 개수를 리턴하는 키워드이며, long 타입으로 리턴된다.
4. delete...by, remove...by : 삭제 쿼리를 실행하며, 리턴타입이 없거나 삭제한 횟수를 리턴한다.
(+ repository 삭제 시 @Transactional을 추가해야 영속성이 유지된다.)
5. ...First<number>..., ...Top<number>... : 쿼리를 통한 조회되는 결과값의 수를 제한하는 키워드이다.
단, 단건 조회인 경우 <number> 부분을 생략하면 된다.
6. Is : 값의 일치를 위한 조건자 키워드이며, Equals 키워드와 동일한 기능을 수행한다.
7. (Is)Not : 값의 불일치를 위한 조건자 키워드이다.
8. (Is)Null, (Is)NotNull : 해당 컬럼의 레코드의 값이 Null인지 아닌지 체크하는 키워드이다.
9. (Is)True, (Is)False boolen : 타입으로 지정되어 있는 컬럼의 값을 확인하는 키워드이다.
10. And, Or : 여러 조건을 묶을 때 사용하는 키워드이다.
11. (Is)GreaterThan, (Is)LessThan, (Is)Between : 숫자나 datetime 컬럼에서 사용할 수 있는 비교 연산 키워드이며,
경계값을 포함하기 위해서는 Equal 키워드를 추가해야 한다.
12. (Is)StartingWith(==StartsWith), (Is)EndingWith(==EndsWith), (Is)Counting(==Contains), (Is)Like
: 컬럼의 값에서 값이 일부 일치하는지 확인하는 키워드이다.
3. 정렬
보통의 정렬은 쿼리를 통해서 정렬을 하여 조회한다.
쿼리메소드에서는 findByNameOrderByStockAsc 와 같이 Asc, Desc와 같은 메소드로 정렬을 할 수 있다.
여러 정렬 기준으로 사용하고 싶으면 이어 붙여서 설정할 수 도 있다. (ex. findByNameOrderByStockAscPriceDesc)
위와 같이 정렬까지 메소드에 붙이면 정말 길어진다...
이러한 문제를 해결하기 위해서는 정렬 부분을 파라미터 부분으로 빼서 사용이 가능하다.
ex. findByName("pen",Sort.by(asc("price")))
4. 매개변수를 이용한 페이징 처리
스프링 공부할 때 가장 헷갈렸던 부분은 페이징이었다...
처음에 공부할 때는 필드값을 주고 초기화를 시킨 다음에 페이징 관련 숫자를 조절하는 식으로 배웠었다.
나중에는 기존에 만들어 놨던 부분을 가져다 쓰고, 또 라이브러리 등을 이용해서 사용했다.
이번에 다시 공부하니 스프링에 pageable 인터페이스가 생겼다.. 세상 편리해졌다 ㅠ
JPA는 쿼리 메소드에서는 아래와 같이 매개변수를 통해서 페이징을 할 수 있다.
- of(int page, int size) : 0부터 시작하는 페이지 번호와 개수(size), 정렬이 지정되지 않음
- of(int page, int size, Sort.Direction direction, String .. props) : 0부터 시작하는 페이지 번호와 개수, 정렬의 방향과 정렬 기준 필드들
- of(int page, int size, Sort sort) : 페이지 번호와 개수, 정렬 관련 정보
후하 후하...
공부하다 보니 받아쓰기 만한 거 같은데
쿼리는 그래도 다 비슷한 문법이라 가볍게 지나가려고 한다.
'Backend > SpringBoot' 카테고리의 다른 글
| 스프링부트 입문 12. 프로퍼티 암호화, 캐시 (0) | 2024.03.26 |
|---|---|
| 스프링부트 입문 11. 쿼리 어노테이션 (1) | 2024.03.19 |
| 스프링부트 입문 9. JPA 부가기능(with Auditing, MappedSuperclass) (0) | 2024.03.15 |
| 스프링부트 입문 8. 테스트커버리지 (0) | 2024.03.11 |
| 스프링부트 입문 7. 테스트코드 (0) | 2024.03.05 |