Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

SQLJPA

JPA 함수쿼리 작성

public interface AddressRepo extends CrudRepository<Address, Long>{
List<Address> findBySex(String sex);
}


조회함수사용

addressRepo.findBySex("여");



필터 조합및 연산자

검색을위한 SQL의 연산자조합및 필터기능을 JPA 함수에서 대부분 지원합니다.

하지만, 검색조건이 너무 길어져 함수명의 가독성이 오히려 떨어질수 있기때문에

3가지 이상의 검색 조합일때는 JPQL 또는 QueryDSL을 사용할수도 있습니다.(아래에 설명)


SQLJPA
<WHERE 44 < agefindByAgeGreaterThan(int age);
<=WHERE 44 <= agefindByAgeGreaterThanEqual(int age);
>WHERE age < 44findByAgeLessThan(int age);
범위WHERE age BEETWEEN 10 and 20findByAgeBetween(int low,int high);
부분범위WHERE age in ( 34,35,36)findByAgeIn(int age[]);
ANDWHERE 40 < age AND sex='남'findByAgeGreaterThanAndSex(int age,String sex);
ORWHERE 40 < age OR sex='여'findByAgeGreaterThanOrSex(int age,String sex);

...

Code Block
languagejava
themeEmacs
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문 지정이 가능합니다.

SQLJPA
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")
List<AddressStatistics> findSexCount();

}

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
languagejava
themeEmacs
title사용예
		List<AddressStatistics> addressStaticBySex = addressRepo.findSexCount();		
		addressStaticBySex.forEach(item -> {
			String itemString = String.format("%s %d", item.getFname(), item.getCnt());
			System.out.println(itemString);
		});

...