JPA_ 예제 풀이 (상세 조회 ②)

김지영·2024년 3월 20일

jpa

목록 보기
7/18
  • 상세조회 :
    return : 객체 1개 (null 이 될 가능성이 있음)

--> 해결
: Optional<객체> : null 방지 래퍼클래스



  1. like 검색 함수 : 페이징 처리
    -DeptService
    public Page<Dept> findAllByDnameContaining(String dname,
                                               Pageable pageable) {
//      DB like 검색 함수 실행 : 페이징 처리
        Page<Dept> page
                = deptRepository
                .findAllByDnameContaining(dname, pageable);
        return page;
    }


  1. 상세조회
    -DeptController
//    상세조회 : 테스트용(생략)
    @GetMapping("/dept/{dno}")
    public String getDeptId(@PathVariable int dno,
                            Model model){

//        DB 상세조회 서비스 함수 실행
        Optional<Dept> optionalDept
                = deptService.findById(dno);
//        JSP 객체 전송 : 옵셔널객체.get() : 객체 꺼내기
        model.addAttribute("dept", optionalDept.get());
        return "basic/dept/dept_id.jsp";
    }
}


  1. 저장/수정
    : 1) 기본키가(부서번호) 없으면 저장(insert)
    2) 기본키가(부서번호) 있으면 수정(update)
    => JPA 내부적으로 if문 있음 : 알아서 실행됨
    -DeptService
    public Dept save(Dept dept) {
//        JPA 저장 함수 실행 : return 값 : 저장된 객체
        Dept dept2 = deptRepository.save(dept);

        return dept2;
    }
}
  1. 저장
    : 1) 추가(저장) 페이지 열기 함수
    -DeptController
   @GetMapping("/dept/addition")
    public String addDept() {
        return "basic/dept/add_dept.jsp";
    }


★ 저장! 알아두기 ★

insert / post 방식 - @PostMapping

  1. input 태그 : 부서명 / 부서위치
    add_dept.jsp
<%--         저장함수--%>
        <form action="/basic/dept/add" method="post">

            <%--           input 태그 : 부서명--%>
            <div class="mb-3">
                <label for="dname" class="form-label">dname</label>
                <input type="text"
                       class="form-control"
                       id="dname"
                       name="dname"
                       placeholder="부서명입력">
            </div>

        <%--           input 태그 : 부서위치--%>
            <div class="mb-3">
                <label for="loc" class="form-label">loc</label>
                <input type="text"
                       class="form-control"
                       id="loc"
                       name="loc"
                       placeholder="부서위치입력">
            </div>

            <%--           저장 버튼 --%>
            <div class="mb-3">
                <button type="submit" class="btn btn-primary">저장</button>
            </div>
        </form>
    </div>

  • 화면 출력
profile
그냥 졍이라구하자

0개의 댓글