지난 번 포스팅에서 작성한 코드에 대한 테스트 코드를 만들어보겠습니다.
1. 테스트 클래스 생성
/spring-data-sample/src/test/java/kr/co/vicki/sample/spring/data/jpa/repository/IMemberRepositoryTest.java
01 | package kr.co.vicki.sample.spring.data.jpa.repository; |
03 | import static org.junit.Assert.*; |
05 | import kr.co.vicki.sample.spring.data.jpa.domain.Member; |
08 | import org.junit.runner.RunWith; |
09 | import org.springframework.beans.factory.annotation.Autowired; |
10 | import org.springframework.test.context.ContextConfiguration; |
11 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; |
12 | import org.springframework.transaction.annotation.Transactional; |
14 | @RunWith (SpringJUnit4ClassRunner. class ) |
15 | @ContextConfiguration (locations = "classpath:/repository-context.xml" ) |
17 | public class IMemberRepositoryTest { |
20 | IMemberRepository repository; |
23 | public void testCrud() { |
25 | Member entity = new Member(); |
26 | entity.setMemberId( "vicki" ); |
27 | entity.setMemberName( "자수씨" ); |
29 | repository.save(entity); |
위의 테스트 코드를 실행하니 아래와 같은... 시퀀스가 없다고 합니다.
하이버네이트 용 시퀀스를 생성합니다.
1 | CREATE SEQUENCE hibernate_sequence |
코드를 실행하면 결과는 체크가 불가능하지만 녹색바가 뜨기 때문에 정상 동작한다고 생각합니다 -ㅅ-;;;
2. JpaRepository 의 이용
JpaRepository 는 기존에 사용하였던 CrudRepository 와 PagingAndSortingRepository 를 상속받는 구조입니다.
기존에 사용하였던 CRUD 외에 페이징과 소팅도 지원을 하며 메소드 이름을 통해 쿼리 제너레이션이 가능합니다.
IMemberRepository 의 superclass 를 JpaRepository 로 변경한 후 아래와 같이 메소드를 추가합니다.
1 | public interface IMemberRepository extends JpaRepository<Member, Long> { |
3 | Member findByMemberId(String memberId); |
findByMemberId(String memberId) 메소드는 메소드 이름 통해 쿼리를 생성하여 실행되게 됩니다.
select m from Member m where m.memberId = ?1
아래와 같은 규칙으로 메소드 이름으로 쿼리가 생성되니 참고를...
|
Sample |
JPQL snippet |
And |
findByLastnameAndFirstname |
… where x.lastname = ?1 and x.firstname = ?2 |
Or |
findByLastnameOrFirstname |
… where x.lastname = ?1 or x.firstname = ?2 |
Between |
findByStartDateBetween |
… where x.startDate between 1? and ?2 |
LessThan |
findByAgeLessThan |
… where x.age < ?1 |
GreaterThan |
findByAgeGreaterThan |
… where x.age > ?1 |
IsNull |
findByAgeIsNull |
… where x.age is null |
IsNotNull,NotNull |
findByAge(Is)NotNull |
… where x.age not null |
Like |
findByFirstnameLike |
… where x.firstname like ?1 |
NotLike |
findByFirstnameNotLike |
… where x.firstname not like ?1 |
OrderBy |
findByAgeOrderByLastnameDesc |
… where x.age > ?1 order by x.lastname desc |
Not |
findByLastnameNot |
… where x.lastname <> ?1
|
SQL 없이 직관적으로 코딩이 가능한 Spring Data JPA!!! 실제 개발 프로젝트에 적용시키까지는 많은 시간이 걸리겠지만 컨셉은 아주 상콤합니다!!!