비교적 단순한 쿼리들은 JpaRepository에서 @Query를 사용하지 않아도 구현할 수 있다. 예를들어 두 개의 값을 조건으로 결과를 조회하는 쿼리이다.
SELECT *
FROM comment
WHERE comment_sn = [값 1]
AND board_sn = [값 2];
이를 JpaRepository에서 메서드의 이름을 규칙에 맞게 설정하는 것으로 작성할 수 있다. JpaRepository에는 findById()라는 메서드가 있다. 이 메서드는 Id 하나를 사용해 쿼리를 조회하는 기능을 한다.
이 메서드의 이름을 약간 바꾸면 @Query를 사용하지 않고도 조건 2개를 사용하는 쿼리를 만들 수 있다.
Optional<Comment> findByBoardSnAndCommentSn(Long boardSn, Long commentSn);
findBy ~를 이어서 BoardSnAndCommentSn이 붙었다. 여기에 'And'는 실제 쿼리에 사용되는 'AND' 구문을 의미한다. 즉, boardSn과 commentSn라는 2개의 컬럼을 사용해 SELECT문을 수행하는 메서드이다.
덧붙여 메서드의 파라미터 순서는 매우 중요하다. findByNameAndAge일 경우 파라미터의 순서는 첫 번째가 name, 두 번째가 age이어야한다. 파라미터명은 일치하지 않아도 상관없다.
* 쿼리메서드 작명
And | findByNameAndAge(String name, int age) = WHERE name = #{name} AND age = #{age} |
Or | findByNameOrAge(String name, int age) = WHERE name = #{name} OR age = #{age} |
Between | findByAgeBetween(int num1, int num2) = WHERE age BETWEEN #{num1} AND #{num2} |
LessThan | findByAgeLessThan(int age) = WHERE age < #{age} |
LessThanEqual | findByAgeLessThanEqual(int age) = WHERE age <= #{age} |
GreaterThan | findByAgeGreaterThan(int age) = WHERE age > #{age} |
GreaterThanEqual | findByAgeGreaterThanEqual(int age) = WHERE age >= #{age} |
After | findByDateAfter(Date date) = WHERE date > #{date} |
Before | findByDateBefore(Date date) = WHERE date < #{date} |
IsNull | findByNameIsNull() = WHERE name IS NULL |
IsNotNull, NotNull | findByNameIsNotNull() = WHERE name IS NOT NULL |
Like | findByNameLike(String name) = WHERE name LIKE #{name} |
NotLike | findByNameNotLike(String name) = WHERE name NOT LIKE #{name} |
StartsWith, StartingWith | findByNameStartsWith(String name) = WHERE name LIKE #{name} || '%' |
EndsWith, EndingWith | findByNameEndsWith(String name) = WHERE name LIKE '%' || #{name} |
Contains, Containing | findByNameContains(String name) = WHERE name LIKE '%' || #{name} || '%' |
OrderBy | findByAgeOrderByName(int age) = WHERE age = #{age} ORDER BY name |
Not | findByNameNot(String name) = WHERE name != #{name} |
In | findByNameIn(Collection<String> names) = WHERE name IN #{names} |
NotIn | findByNameNotIn(Cllection<String> names) = WHERE name NOT IN #{names} |
True | findByBoolTrue() = WHERE bool = true |
False | findByBoolFalse() = WHERE bool = false |
'Java > Spring Boot' 카테고리의 다른 글
[Spring Boot] Spring Mail 설정하기 (0) | 2023.04.15 |
---|---|
[Spring Boot] JSP 사용하기 (0) | 2023.04.12 |
[Spring Boot] JpaRepository에서 @Query 사용하기 (0) | 2023.04.10 |
[Spring Boot] JPA의 Entity에서 1대N 관계 설정 (0) | 2023.04.10 |
[Spring Boot] JPA의 복합키 (0) | 2023.04.09 |