Page History
...
SQL | JPA |
---|---|
JPA 함수쿼리 작성 public interface AddressRepo extends CrudRepository<Address, Long>{ 조회함수사용 addressRepo.findBySex("여"); |
필터 조합및 연산자
검색을위한 SQL의 연산자조합및 필터기능을 JPA 함수에서 대부분 지원합니다.
하지만, 검색조건이 너무 길어져 함수명의 가독성이 오히려 떨어질수 있기때문에
3가지 이상의 검색 조합일때는 JPQL 또는 QueryDSL을 사용할수도 있습니다.(아래에 설명)
SQL | JPA | |
---|---|---|
< | WHERE 44 < age | findByAgeGreaterThan(int age); |
<= | WHERE 44 <= age | findByAgeGreaterThanEqual(int age); |
> | WHERE age < 44 | findByAgeLessThan(int age); |
범위 | WHERE age BEETWEEN 10 and 20 | findByAgeBetween(int low,int high); |
부분범위 | WHERE age in ( 34,35,36) | findByAgeIn(int age[]); |
AND | WHERE 40 < age AND sex='남' | findByAgeGreaterThanAndSex(int age,String sex); |
OR | WHERE 40 < age OR sex='여' | findByAgeGreaterThanOrSex(int age,String sex); |
...
Code Block | ||||
---|---|---|---|---|
| ||||
package com.example.demo.data; public class AddressStatistics { private String fname; //집계대상 필드는 변동이될수 있기때문에 한정짓지말고,공용이름을 사용합니다. private Long cnt; public AddressStatistics(String fname,Long cnt) { this.fname = fname; this.cnt = cnt; } } |
쿼리 정의
처음으로 쿼리검색 조건을 JPA함수형이 아닌, SQL문과 비슷한 JPQL문을 사용하였습니다.
...
JPQL(JPA Query Language) 을 사용 하였습니다하였으며, 함수명을 지정하고 해당 함수에 대응하는 SQL문 지정이 가능합니다.
SQL | JPA |
---|---|
SELECT sex,count(*) FROM db_example.address group by sex | public interface AddressRepo extends CrudRepository<Address, Long>{ @Query("select new com.example.demo.data.AddressStatistics(t.sex,count(t) as cnt) from Address t group by t.sex") } |
SELECT sex,count(*) FROM db_example.address where address group by sex where address like '%Seoul' | @Query("select new com.example.demo.data.AddressStatistics(t.sex,count(t) as cnt) from Address t group by t.sex where t.address like %?1") List<AddressStatistics> findSexCount(String firstAddress); |
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
List<AddressStatistics> addressStaticBySex = addressRepo.findSexCount(); addressStaticBySex.forEach(item -> { String itemString = String.format("%s %d", item.getFname(), item.getCnt()); System.out.println(itemString); }); |
...