[JPA] 예제.1

TomCat·2023년 4월 28일
0

게시판 CRUD

@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 요청 처리

0개의 댓글