Jpa Repository를 상속받은 인터페이스에서 findByXXX 형태로 메소드를 만들면 JPA에 의해 WHERE 절이 추가된다.
예를 들어 select * from product where id =아이디; 와 같은 SQL문을 실행시키고 싶다면 findById (아이디)를 사용하면 된다.
public Product getProductById(Long idx){
Product result = productRepository.findById(idx);
if(result.isPresent()){
Product product = result.get();
return product;
}
return null;
}
반환 타입 : public Product findById(아이디)
Optional<Board> result = boardRepository.findById(id);
다음과 같은 형식으로도 작성할 수 있다.
Optional이란?
select * from product; : findAll()
public List<Product> productList(){
List<Product> productList = productRepository.findAll();
return productList;
}
반환값 : public List< Product > findAll()
select * from product where 변수 = 값; : fidndBy변수(값)
//ProductRepository.java
public interface ProductRepository extends JpaRepository<Product, Long> {
Optional<Product> findAllByName(String name);
public Product getProductByName(String name){
Optional<Product> result = productRepository.findAllByName(name);
if(result.isPresent()){
Product product = result.get();
return product;
}
return null;
}
반환값 : public Optional< Product > findAllBy변수이름(변수타입 매개변수)
그 외에도 아래와 같은 규칙들이 있다.
| 메소드 | 설명 |
|---|---|
| findAll() | 전체 데이터 조회 |
| findBy() | 조건을 추가하여 전체 데이터 조회 |
| findTop5By() | 조건에 맞는 데이터 중 상위 5건 |
| findDistinctBy() | 중복을 제거하여 조회 |
| findFirstBy() | 조회된 데이터 중 1건 |
| count() | 전체 행 수 조 |
| countBy() | 조건에 맞는 전체 행 수 조회 |
| save() | 단일 데이터 저장 |
| saveAll() | 여러 건의 데이터 저장 |
| delete() | 단일 데이터 삭제 |
| deleteAll() | 여러 건의 데이터 삭제 |
| deleteBy() | 조건에 맞는 데이터 삭제 |
| 조건 | 메소드 명명규칙 예시 | 실제 생성된 쿼리 예시 |
|---|---|---|
| 동일(=) | findByName | select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.name=? |
| 대소(>, >=, <, <=) | > : findByCodeIsGreaterThan | select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.code>? |
| >= : findByCodeIsGreaterThanEqual | select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.code>=? | |
| < : findByCodeIsLessThan | select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.code<? | |
| <= : findByCodeIsLessThanEqual | select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.code<=? | |
| 범위(BETWEEN) | findByCodeBetween 파라미터 2개 필요 | select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.code between ? and ? |
| 포함(LIKE, NOT LIKE) | findByNameContains | select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.name like ? escape '\' |
| findByNameNotContains | select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.name not like ? escape '\' | |
| findByNameLike | select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.name like ? escape '\' | |
| findByNameNotLike | select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.name not like ? escape '\' | |
| 시작, 끝 값(startWith, endWith) | findByNameStartsWith | select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.name like ? escape '\' |
| findByNameEndsWith | select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.name like ? escape '\' | |
| NULL | findByNameIsNull 파라미터 필요 없음 | select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.name is null |
| findByNameIsNotNull 파라미터 필요 없음 | select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.name is not null | |
| IN | findByNameIn List 파라미터 필요 | select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.name in (?) |
| findByNameNotIn List 파라미터 필요 | select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.name not in (?) |
| 종류 | 메소드 예시 | 쿼리 예시 |
|---|---|---|
| 오름차순 | findbyOrderByCode | select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 order by te1_0.code |
| 내림차순 | findbyOrderByCodeDesc | select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 order by te1_0.code desc |
| 컬럼 여러개 | findbyOrderByCodeDescNameDesc | select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 order by te1_0.code desc,te1_0.name desc |