여러 쿼리 메소드는 대부분 두 가지 중 하나.

QueryDSL

연동 방법

의존성 추가

<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-apt</artifactId>
</dependency>

<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-jpa</artifactId>
</dependency>

.....

<plugin>
    <groupId>com.mysema.maven</groupId>
    <artifactId>apt-maven-plugin</artifactId>
    <version>1.1.3</version>
    <executions>
        <execution>
            <goals>
                <goal>process</goal>
            </goals>
            <configuration>
                <outputDirectory>target/generated-sources/java</outputDirectory>
                <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
            </configuration>
        </execution>
    </executions>
</plugin>

http://www.querydsl.com/static/querydsl/4.0.1/reference/ko-KR/html_single/

public interface AccountRepository extends JpaRepository<Account, Long>, QuerydslPredicateExecutor<Account> {
}
@RunWith(SpringRunner.class)
@DataJpaTest
public class AccountRepositoryTest {

	@Autowired
	AccountRepository accountRepository;

	@Test
	public void crud() {
		Predicate predicate = QAccount.account
				.firstname.containsIgnoreCase("cm")
				.and(QAccount.account.lastname.startsWith("lee"));

		Optional<Account> one = accountRepository.findOne(predicate);

		assertThat(one).isEmpty();
	}
}