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 를 따른다.