Versions Compared

Key

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

...

Address라고 정의한 Entity가 QueryDSL에서는 QAddress 라는 도메인 객체를 자동 생성합니다.

Code Block
languagejava
themeEmacs
package com.example.demo.data;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;


public interface AddressRepoDSL extends JpaRepository<Address, Long>,
QueryDslPredicateExecutor<Address>{
	
}


QueryDSL을 활용하여 쿼리빌드하기

Code Block
languagejava
themeEmacs
	@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);
		});		
	}
No Format
builder.and(userAddress.name.eq("민수1") );
builder.and(userAddress.address.like("%" + "서" +"%"));

QueryDSL 의 핵심이 되는 검색조건을 만드는 방법입니다.  TypeSafe하게 검색 조건을

유연하게 복합할수가 있습니다. 이것은 복합적인 검색인자값이 null 혹은 Optional 등을 포함하였을때

중첩 if문등을 억제할수가 있습니다.  


예를들면, 기존 SQL개발 방식에서는 이름이 있냐? 없냐에 따라 SQL문이 분기처리가 되었고 두가지 구문을

관리하였을것입니다. 조건식이 복잡해질시.. 중첩 if문 처리가 더욱더 어려워지고  sql문은 typesafe하지 않기때문에

어떠한 케이스에서는 sql문 syntax 에러를 유발 하였습니다.

  • Select * from address where name='민수1'
  • Select * from address


QueryDSL에서는 단지 필요한 조건만 동적으로 추가하기때문에 제어가 복잡해 지더라도

가독성이 좋으며, TypeSafe하다란 말은 허용되지 않는 SQL문 수행을 빌드단계에서 걸러낼수가 있는 장점이 있습니다.