Board Entity, Repository, Service를 만들어 보고 Test를 통해 검증해보자
Board
@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Board {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String title;
@Column
private String writer;
@Column
private String content;
@Column
private Integer view;
@Builder
public Board(String title, String writer, String content, Integer view) {
this.title = title;
this.writer = writer;
this.content = content;
this.view = view;
}
}
Board는 5개의 필드 값을 가집니다.(id, 제목, 작성자, 내용, 조회수)
생성자나 Setter를 대신하여 @Builder를 사용합니다.
BoardRepository
JpaRepository를 상속받지 않고 직접 구현하여 보았습니다.
@Repository
@RequiredArgsConstructor
public class BoardRepository {
private final EntityManager em;
//게시글 저장
public Long save(Board board) {
em.persist(board);
return board.getId();
}
//게시글 한개 찾기
public Board findById(Long id) {
return em.find(Board.class, id);
}
//전체 게시글 찾기
public List<Board> findAll(){
return em.createQuery("select m from Board m")
.getResultList();
}
}
BoardRepository는 3가지 기능이 있습니다.
- save
전달받은 게시글을 저장하며 이를 통해 생성된 Id를 반환합니다.
- findById
Id를 통하여 찾는 일치하는 게시글을 반환합니다.
- findAll
전체 게시글을 List에 저장하여 반환합니다.
BoardService
@Service
@RequiredArgsConstructor
public class BoardService {
private final BoardRepository boardRepository;
@Transactional
public Long save(Board board) {
Long id = boardRepository.save(board);
return id;
}
public Board findBoard(Long id){
Board board = boardRepository.findById(id);
return board;
}
public List<Board> findBoards() {
List<Board> boardList = boardRepository.findAll();
return boardList;
}
}
Service 계층은 다음과 같다.
BoardServiceTest
@SpringBootTest
class BoardServiceTest {
@Autowired
BoardService boardService;
@Autowired
BoardRepository boardRepository;
@Test
@Transactional
void save() {
//given
Board board = Board.builder()
.title("hello")
.content("hi")
.writer("Lee")
.view(1)
.build();
//when
Long savedId = boardService.save(board);
//Then
Assertions.assertThat(board).isEqualTo(boardRepository.findById(savedId));
}
}
게시글 추가가 정상적으로 이루어지는 확인하기 위한 테스트입니다.
Id는 @GeneratedValue로 자동 생성되기 때문에 만드는 실수는 하지 말자

테스트가 성공하여 정상적으로 작동함을 확인할 수 있습니다.
다음에는 BootStrap을 사용하여 화면을 만들고 Controller를 만들어 MVC패턴을 완성해 보자
'Spring' 카테고리의 다른 글
| 스프링부트 게시판 만들기 - 5 (Thymeleaf를 사용하여 게시글 작성하기 Create) (0) | 2022.06.30 |
|---|---|
| 스프링부트 게시판 만들기 - 4 (BootStrap) (0) | 2022.06.29 |
| 스프링부트 게시판 만들기 - 2 (H2 데이터베이스와 연결) (0) | 2022.06.28 |
| 스프링부트 게시판 만들기 - 1 (초기 세팅) (0) | 2022.06.28 |