inblog logo
|
codingb
    Spring

    BoardJPARepository_Test 해보기

    coding S's avatar
    coding S
    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

    RSS·Powered by Inblog