작성한 memoRepository를 이용해서 작성된 테이블에 SQL 없이 CRUD 작업을 테스트 해본다.
JpaRepository의 경우 다음과 같은 메서드를 활용한다.
- insert 작업 : save(엔티티객체)
- select 작업: findById(키 타입) , getOne(키 타입)
- update 작업: save(엔티티객체)
- delete 작업: deleteById(키 타입) , delete(엔티티 객체)
insert와 update 작업에 사용하는 메서드가 동일하게 save()를 이용하는데 이는 JPA의 구현체가 메모리상에서 객체를 비교하고 없다면 insert, 존재한다면 update를 동작시키는 방식으로 동작하기 때문이다.
테스트 코드는 프로젝트 생성시에 만들어진 test 폴더에 'repository' 패키지를 만들고 MemoRepositoryTests를 만들어 테스트를 진행한다.
//등록작업테스트
@Test
void testInsertDummies(){
IntStream.rangeClosed(1,100).forEach(i -> {
Memo memo = Memo.builder().memoText("Memo.." + i).build();
memoRepository.save(memo);
//log.info(memo);
});
}
//조회작업테스트
@Test
void testSelect(){
Long mno = 100L;
Optional<Memo> result = memoRepository.findById(mno);
log.info("=============================================");
if(result.isPresent()){
Memo memo1 = result.get();
log.info("----- memo ----- " + memo1);
}
}
@Test
@Transactional
void testSelect2(){
Long mno = 100L;
Memo memo = memoRepository.getOne(mno);
log.info("=============================================");
log.info(memo);
}
//수정작업테스트
@Test
public void testUpdate(){
Memo memo = Memo.builder().mno(100L).memoText("Update Text")
.build();
log.info( "memo : " + memoRepository.save(memo));
}
Hibernate:
select
m1_0.mno,
m1_0.memo_text
from
tbl_memo m1_0
where
m1_0.mno=?
Hibernate:
update
tbl_memo
set
memo_text=?
where
mno=?