BoardJPARepository_Test 해보기

coding S's avatar
Mar 20, 2024
BoardJPARepository_Test 해보기
notion image
 

[ BoardJPARepository 생성 ]

package shop.mtcoding.blog.board; import org.springframework.data.jpa.repository.JpaRepository; public interface BoardJPARepository extends JpaRepository<Board, Integer> { }
💡
findByIdJoinUser를 제외한 나머지는 JPARepository가 들고 있음. (기본적인 CRUD라?) findByIdJoinUser만 BoardJPARepository에 만들어주자!
 

[ 테스트 시작! ]

notion image
💡
지금 다 LAZY 전략이다.
 

[ save_test ]

@DataJpaTest public class BoardJPARepositoryTest { @Autowired private BoardJPARepository boardJPARepository; //save @Test public void save_test() { //given User sessionUser = User.builder().id(1).build(); Board board = Board.builder() .title("제목5") .content("내용5") .user(sessionUser) .build(); //when boardJPARepository.save(board); //then System.out.println("save_test : " + board.getId()); }
notion image
 

[ findById_test ]

//findById @Test public void findById_test() { //given int id = 1; //when Optional<Board> boardOP = boardJPARepository.findById(id); if (boardOP.isPresent()) { Board board = boardOP.get(); System.out.println("findById_test : " + board.getTitle()); } //then }
notion image
 

[ findByIdJoinUser ] - BoardJPARepository에서 작성

package shop.mtcoding.blog.board; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; public interface BoardJPARepository extends JpaRepository<Board, Integer> { @Query("select b from Board b join fetch b.user u where b.id = :id") Board findByIdJoinUser(@Param("id") int id); }
💡
이렇게 2줄만 적으면 join도 끝! 알아서 구현해줌 @Query문 적어줘야함 (join이니… 쿼리 메소드 사용 불가!)
 

notion image
💡
원래는 이렇게 길게 적었는데… 2줄로 끝나버렸다.

[ findByIdJoinUser_test ]

//findByIdJoinUser @Test public void findByIdJoinUser_test() { //given int id = 1; //when Board board = boardJPARepository.findByIdJoinUser(id); //then System.out.println("findByIdJoinUser_test : " + board.getTitle()); System.out.println("findByIdJoinUser_test : " + board.getUser().getUsername()); Assortion~~~코드도 있어야함 }
💡
Assortion 하기 전에 반드시 눈으로 검증을 한 다음 하기!
 

[ findAll_test ] - Sort

//findAll (sort) @Test public void findAll_test() { //given Sort sort = Sort.by(Sort.Direction.DESC, "id"); //when List<Board> boardList = boardJPARepository.findAll(sort); //then System.out.println("findAll_test : " + boardList); }
notion image
 

[ deleteById_test ]

//deleteById @Test public void deleteById_test() { //given int id = 1; //when boardJPARepository.deleteById(id); //then }
notion image
💡
delete 할 때, select 먼저 하고 delete 날아가니까 select 쿼리문이 뜬다. 근데 지금 delete 쿼리가 안 날아가는 이유 → 트랜젝션 때문 (알지?)
💡
엔티티 매니저로 삭제할 때에는 em.remove로 해야함. 삭제할 때 번호로 삭제하려면 조회한 아이디로 삭제해야하기 때문에 아이디를 먼저 받아야한다. 때문에 바로 삭제가 안되고 조회부터 해야 함

[ delete쿼리 확인하고 싶으면 em.flush ]

@DataJpaTest public class BoardJPARepositoryTest { @Autowired private BoardJPARepository boardJPARepository; @Autowired private EntityManager em; //deleteById @Test public void deleteById_test() { //given int id = 1; //when boardJPARepository.deleteById(id); em.flush(); //then }
notion image
💡
조회 후 삭제 쿼리문 날아가는 것 확인!!!
 
 
Share article

codingb