Versions Compared

Key

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

JPA Repositori를 통해 일반적인 검색 기능은 앞장에서 여러가지 샘플을 통해 살펴보았습니다.

이번장에서는 조금더 복잡한 조회쿼리가 가능하고, 효율적인 저장관점에서의 저장소 구현을 알아보겠습니다저장관점에서의 Repository 기능을 활용해보겠습니다.


JPA저장소는 읽기/저장/삭제가 모두되고, 최종 DB저장소의 반영까지 책임(트랜잭션처리)을 지는

양방향 영속성 객체이다라고 간단하게 정의 가능합니다.

...

JPA의 특서오가 더불어 관계형 DB의 특성을 더 잘알고 있어야 합니다. ( 난이도 업 )

검색및 집계 처리(복습)

검색 함수쿼리

Code Block
languagejava
themeEmacs
public interface AddressRepo extends CrudRepository<Address, Long>{
	
	List<Address> findBySex(String sex);
	
	List<Address> findBySex(String sex, Sort sort);
	
	List<Address> findBySexOrderByAgeDesc(String sex);
	
	List<Address> findByAgeGreaterThan(int age);
	
	List<Address> findByAgeGreaterThanEqual(int age);
		
	List<Address> findByAgeLessThan(int age);
		
	List<Address> findByAgeBetween(int low,int high);
	
	List<Address> findByAgeGreaterThanAndSex(int age,String sex);
	
	List<Address> findByAgeGreaterThanOrSex(int age,String sex);
		
	List<Address> findByAgeIn(int age[]);
}

JPQL을 사용한 집계처리

No Format
	@Query("select new com.example.demo.data.AddressStatistics(t.address,AVG(t.age)) from Address t where t.age > :minage GROUP BY t.address HAVING AVG(t.age) > :filterage ")
	List<AddressStatistics> findRegionAvgage(
			@Param("minage") int minage,
			@Param("filterage") double filterage
			);


Native 쿼리

No Format
	@Query(value="SELECT address,age,name,phoneNbr,sex FROM address " + 
			"UNION " + 
			"SELECT address,age,name,phoneNbr,sex FROM address2 ",
			nativeQuery = true)
	List<?> makeUniOn();


QueryDSL 지원이되는 저장소

Code Block
languagejava
themeEmacs
//인터페이스 선언부
public interface AddressRepoDSL extends JpaRepository<Address, Long>,
QueryDslPredicateExecutor<Address>{
	
}


//사용부
	@Autowired
	private AddressRepoDSL addressRepoDSL;
	public void jpa_queryDslTest() {
		
		QAddress	userAddress = QAddress.address1;
		BooleanBuilder builder = new BooleanBuilder();
		
		builder.and(userAddress.name.eq("민수1") )
			   .and(userAddress.address.like("%" + "서" +"%"));		
				
		Iterable<Address> addressList =  addressRepoDSL.findAll(builder);
		addressList.forEach( item -> {
			String itemString = String.format("%d%s %s %s %s %s",item.getId(),item.getName(),
					item.getPhoneNbr(), item.getSex(),item.getAddress(),item.getAge());
			System.out.println(itemString);
		});
		
	}