package com.u2ware.springfield.sample.part1;
import lombok.Getter;
import lombok.Setter;
public class FindByIdAndPasswordOrderByNameDesc {
	@Getter @Setter public String id;
	@Getter @Setter public String password;
}
		
public class JpaBeanRepositoryTest extends ApplicationContextTestRoot{
	.
	.
	@Test
	public void testFindByEntityQueryObject1() throws Exception{
		
		FindByIdAndPasswordOrderByNameDesc query 
			= new FindByIdAndPasswordOrderByNameDesc();
		query.setPassword("pwd7");
		
		List<?> result = jpaBeanRepository.findAll(query);
		Assert.assertEquals(1, result.size());
	}
}
		findAll() 에 전달되는 객체의 class name 이 "FindByIdAndPasswordOrderByNameDesc" 이므로, 이를 기본 Query Method 문자열로 한다.
testFindByEntityQueryObject1() 에서 id 는 null 이고, password 거 null 이 아니므로 "password = ?" 가 where 조건으로 추가되고, name 의 내림차순(DESC)으로 "order by name desc" 가 질의에 추가된다.
package com.u2ware.springfield.sample.part1;
import com.u2ware.springfield.repository.QueryMethod;
import lombok.Getter;
import lombok.Setter;
@QueryMethod("findByNameAndAgeOrderByIdAsc")
public class MyQuery {
	@Getter @Setter public String name;	
	@Getter @Setter public Integer age;
}
		
public class JpaBeanRepositoryTest extends ApplicationContextTestRoot{
	.
	.
	@Test
	public void testFindByEntityQueryObject2() throws Exception{
		
		MyQuery query = new MyQuery();
		query.setName("name5");
		
		List<?> result = jpaBeanRepository.findAll(query);
		Assert.assertEquals(1, result.size());
	}
}
		findAll() 에 전달되는 객체의 @QueryMethod 선언값이 "findByNameAndAddressOrderByIdAsc" 이므로, 이를 기본 Query Method 문자열로 한다.
testFindByEntityQueryObject2() 에서 name 은 null 이 아니고, address 는 null 이므로 "name = ?" 가 where 조건으로 추가되고, id 의 오림차순(ASC)으로 "order by id asc" 가 질의에 추가된다.
public interface EntityRepository<T, ID extends Serializable> {
	.	
	.	
	public long count(Object query);
	public List<T> findAll(Object query);
	public List<T> findAll(Object query, Sort sort);
	public Page<T> findAll(Object query, Pageable pageable);
}
		EntityRepository 의 count() 및 findAll() 의 query 인자를 Entity Query Object 라고 명명 한다.
SQLSESSION 전략에서 Query Method 문자열은 sqlsession.xml 에 미리정의된 mapping query statement 를 의미한다.
JPA 전략에서 Query Method문자열은 "findBy~" 로 시작하는 spring-data JPA Query Method를 따른다.
MONGODB 전략에서 Query Method문자열은 "findBy~" 로 시작하는 spring-data mongodb Query Method 를 따른다.