다음으로는 JpaRepository를 상속받는 인터페이스를 생성하겠습니다.
MemberRepository
package org.zerock.board.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.zerock.board.entity.Member;
public interface MemberRepository extends JpaRepository<Member, String> {
}
BoardRepository
package org.zerock.board.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.zerock.board.entity.Board;
public interface BoardRepository extends JpaRepository<Board, Long> {
}
ReplyRepository
package org.zerock.board.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.zerock.board.entity.Reply;
public interface ReplyRepository extends JpaRepository<Reply, Long> {
}
다음으로는 테스트코드를 생성하겠습니다.
테스트 아래에 RepositoryTests들을 생성합니다.
먼저 MemberRepositoryTests에서 100명의 멤버를 생성하여 DB에 저장합니다.
MemberRepositoryTests
package org.zerock.board.repository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.zerock.board.entity.Member;
import java.util.stream.IntStream;
@SpringBootTest
public class MemberRepositoryTests {
@Autowired
private MemberRepository memberRepository;
@Test
public void insertMembers() {
IntStream.rangeClosed(1,100).forEach(i -> {
Member member = Member.builder()
.email("user" + i + "@aaa.com")
.password("1111")
.name("USER" + i)
.build();
memberRepository.save(member);
});
}
}
다음으로는 BoardRepositoryTests에서 100개의 Board를 생성합니다. 멤버는 테스트에서 id값인 email만 지정하여 생성한 후, 게시판에 넣어줍니다.
BoardRepositoryTests
package org.zerock.board.repository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.zerock.board.entity.Board;
import org.zerock.board.entity.Member;
import java.util.stream.IntStream;
@SpringBootTest
public class BoardRepositoryTests {
@Autowired
private BoardRepository boardRepository;
@Test
public void insertBoard() {
IntStream.rangeClosed(1, 100).forEach(i -> {
Member member = Member.builder().email("user"+i+"@aaa.com").build();
Board board = Board.builder()
.title("Title..."+i)
.content("Content..."+i)
.writer(member)
.build();
boardRepository.save(board);
});
}
}
마지막으로 임의의 게시글을 대상으로 댓글을 추가하는 테스트를 ReplyRepositoryTests에 추가합니다.
ReplyRepositoryTests
package org.zerock.board.repository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.zerock.board.entity.Board;
import org.zerock.board.entity.Reply;
import java.util.stream.IntStream;
@SpringBootTest
public class ReplyRepositoryTests {
@Autowired
private ReplyRepository replyRepository;
@Test
public void insertReply() {
IntStream.rangeClosed(1, 300).forEach(i -> {
long bno = (long)(Math.random()*100) + 1;
Board board = Board.builder().bno(bno).build();
Reply reply = Reply.builder()
.text("Reply........" + i)
.board(board)
.replier("guest")
.build();
replyRepository.save(reply);
});
}
}
연관관계가 설정된 엔티티 사이에서 검색 등의 작업이 발생하면, Join연산이 발생하게 됩니다. 글이 길어질 수 있어 Join과 Lazy Loading에 관해서는 다음 글에 작성하고자 합니다.