Page History
...
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); |
GROUP BY
집계함수
함수 | 용도 | 함수 | 용도 |
---|---|---|---|
AVG | MIN | ||
COUNT | SUM | ||
COUNT_BIG | STDEV | ||
GROUPING | STDEVP | ||
GROUPING_ID | VAR | ||
CHECKSUM_AGG | VARP | ||
MAX |
집계 DTO정의
Address데이터를 가지고 특정집계 수행을 한다고 하면 , ex> 성별에따른 회원수 라고 한다면
Address가 가진 2차원 테이블의 모습이 바뀌게 됩니다.
draw.io Diagram | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Address는 이미 정의를 하였지만, 성별에 따른 회원수를 표현하는 오브젝트는 새롭게 정의할 필요가 있습니다.
정의없이 사용도 가능하지만, 추후에 이에 대응하는 Object가 없을시 제어가 어려워질수 있습니다.
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문과 비슷한 JQL문을 사용하였습니다.
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") } |
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
List<AddressStatistics> addressStaticBySex = addressRepo.findSexCount();
addressStaticBySex.forEach(item -> {
String itemString = String.format("%s %d", item.getFname(), item.getCnt());
System.out.println(itemString);
}); |