@Entity
@Table(name = "board") //DB 테이블 이름
public class Board {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; //Primary Key
private String title; //String 타입의 title
private String content; //String 타입의 content
private LocalDateTime createdTime; //LocalDateTime이라는 참조형 타입의 createdTime
private LocalDateTime modifiedTime; //LocalDateTime이라는 참조형 타입의 modifiedTime
// getters와 setters 생략 및 여기서는 사용하지 않음
}
@Repository
@Transactional
public class BoardRepository {
@PersistenceContext //영속성
private EntityManager entityManager; //EntityManager로 Entity 관리
public void save(Board board) {
entityManager.persist(board);
}
public Board findById(Long id) { //id 값으로 조회
return entityManager.find(Board.class, id);
}
public void deleteById(Long id) {
Board board = findById(id); //Board Entity에서 id 값으로 찾는다.
entityManager.remove(board); //id 값으로 찾아진 db인 board 객체를 지운다.
}
}
@Service
public class BoardService {
@Autowired
private BoardRepository boardRepository;
public void save(Board board) {
board.setCreatedTime(LocalDateTime.now());
board.setModifiedTime(LocalDateTime.now());
boardRepository.save(board);
}
public Board findById(Long id) {
return boardRepository.findById(id);
}
public void deleteById(Long id) {
boardRepository.deleteById(id);
}
}
@Controller
public class BoardController {
@Autowired
private BoardService boardService;
@GetMapping("/board/{id}")
public String getBoard(@PathVariable Long id, Model model) {
Board board = boardService.findById(id);
model.addAttribute("board", board);
return "board";
}
@PostMapping("/board")
public String postBoard(@ModelAttribute Board board) {
boardService.save(board);
return "redirect:/board/" + board.getId();
}
@PostMapping("/board/{id}/delete")
public String deleteBoard(@PathVariable Long id) {
boardService.deleteById(id);
return "redirect:/";
}
}
내 작성 순서는
1. Entity에서 DB와 Colunm의 타입 및 이름 매칭 선언
2. Reopsitory에 Entity 기본 연결
3. Sevice와 Repository 기본 연결
4. Contoller와 Service 기본 연결
5. Contoller에 동작할 api 작성
6. 해당 api 코드 작성 후 하나씩 Contoller -> Service -> Repository 작성
Board - > 엔티티 클래스
BoardRepository -> DB와의 상호작용
BoardService -> 실질적인 로직
BoardConroller -> Client의 HTTP 요청 처리