JPA_ 예제 풀이 (저장 / 수정 ③)

김지영·2024년 3월 21일

jpa

목록 보기
8/18

저장 버튼 클릭 시 실행될 함수

-DeptController.java

  • insert -> post -> PostMapping
  • 저장 후 전체페이지로 강제이동 (==리다이렉트)
  • 변수 1개 전달 -> @PathVariable, @RequestParam
  • 객체 1개 전달 -> @ModelAttribute
    @PostMapping("dept/add")
    public RedirectView createDept(
            @ModelAttribute Dept dept
    ) {
//        DB 저장 서비스 함수 실행
        deptService.save(dept);
//        전체 조회 페이지 강제이동 (리다이렉트)
        return new RedirectView("/basic/dept");
    }

-BaseTimeEntity

  • 시간 속성
    private String insertTime = LocalDateTime.now().toString();

    private String updateTime = LocalDateTime.now().toString();

(화면출력)

- 생성일시와 업뎉이트 일시 각각 주기

@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseTimeEntity {
    private String insertTime;

    private String updateTime;

    //    TODO: JPA 에서 insert 가 실행되기전에 실행하는 함수
//     예) OnPrePersist() -> insert 실행
    @PrePersist
    void OnPrePersist() {
//        insert 하기전에 현재날짜를 넣기
        this.insertTime = LocalDateTime.now().toString();
    }

    //    TODO: JPA 에서 update 가 실행되기전에 실행되는 함수
//     예) OnPreUpdate() -> update 실행
    @PreUpdate
    void OnPreUpdate() {
//        update 하기전에 현재날짜를 넣기
        this.updateTime = LocalDateTime.now().toString();
//        insertTime 같이 변경 (생성일시 == 수정일시 동일하게 처리)
        this.insertTime = this.updateTime;
    }
}

  • 실무 사용 날짜포맷(yyyy-MM-dd HH:mm:ss)
    @PrePersist
    void OnPrePersist() {
//        insert 하기전에 현재날짜를 넣기 : 날짜포맷(yyyy-MM-dd HH:mm:ss)
        this.insertTime = LocalDateTime.now()
                .format(DateTimeFormatter
                        .ofPattern("yyyy-MM-dd HH:mm:ss"));
    }

    //    TODO: JPA 에서 update 가 실행되기전에 실행되는 함수
//     예) OnPreUpdate() -> update 실행
    @PreUpdate
    void OnPreUpdate() {
//        update 하기전에 현재날짜를 넣기
        this.updateTime = LocalDateTime.now()
                .format(DateTimeFormatter
                        .ofPattern("yyyy-MM-dd HH:mm:ss"));
//        insertTime 같이 변경 (생성일시 == 수정일시 동일하게 처리)
        this.insertTime = this.updateTime;
    }

(화면출력)

  1. 수정

1) 수정페이지 열기 함수

    @GetMapping("/dept/edition/{dno}")
    public String edition(@PathVariable int dno,
                          Model model
    ) {
//   서비스 상세조회 함수 호출 : return 값 optional 객체
        Optional<Dept> optionalDept = deptService.findById(dno);
//        옵셔녈 객체에서 결과를 꺼내서(부서객체) jsp  로 전송
        model.addAttribute("dept", optionalDept.get());
        return "basic/dept/update_dept.jsp";
    }

2) 수정 버튼 클릭시 실행될 함수

//          2) 수정 버튼 클릭시 실행될 함수
//    update -> put 방식 -> @PutMapping
   @PutMapping("/dept/{edit/{dno}")
   public  RedirectView updateEmp(@PathVariable int dno,
                                  @ModelAttribute Dept dept
   ) {
//        DB 서비스 함수 실행  : save()
       deptService.save(dept);
//        전체 조회 페이지로 강제 이동(리다이렉트)
       return new RedirectView("/basic/dept");
   }
profile
그냥 졍이라구하자

0개의 댓글