제품 상세 페이지 1. ItemController 추가 상품 수정 페이지에서 사용했던 ItemDtl 메소드를 그대로 사용하여 상품 조회 메소드 오버로딩은 파라미터의 순서가 달라도 적용이 됨 2. 제품 상세 페이지 View GitHub 참고 totalPrice 를 계산해서 출력하는 calculateTotalPrice() 메소드 - 처음 화면 출력할 때 수행되고, 그 후에 수량 변동 시 수행됨 3. 제품 상세 페이지 화면
메인화면 1. MainItemDto 메인화면에 출력할 데이터를 위한 DTO 객체 사용자에게 보여질 내용만 포함하고 있음 (등록날짜, 수정날짜, 등록자 등 제외) 2. @QueryProjection Entity 객체를 DTO 객체로 바로 반환하도록 지원하는 어노테이션 @QueryProjection 기능을 사용하기 위해선 QDto 파일 필요 (Maven - compile 수행) 3. 사용자 정의 인터페이스 리포지토리 생성 기존의 ItemRepositoryCustom 클래스에 조회문 추가 ItemRepositoryCustomImpl 클래스에서 getMainItemPage() 메소드 구현 // MainItemDto 객체를 반환 // 멤버변수 초기화는 조회된 결과값에서 MainItemDto 객체 생성자를 통해 지..
상품 목록 페이지 1. 상품 목록 페이지 결과 화면 상품 목록 테이블 부분, 하단 페이지 부분, 검색 조건 부분 존재 2. 상품 목록 페이지 View GitHub 참고 스크립트 부분 "검색" 버튼을 클릭하면 조회할 페이지 번호를 다시 "0"으로 설정해서 조회해야함 페이지 번호를 전달 받아 form에 설정된 검색 조건 값들을 초기화하여 QueryString으로 보내는 page() 함수 // "검색" 버튼이 눌리면 $("#searchBtn").on("click",function(e) // form 태그의 전송을 막음 (페이지 번호가 그대로 넘어갈 수 있음) e.preventDefault(); // 페이지 번호를 0으로 설정한 뒤 page 함수 수행 page(0); 상품 목록 테이블 부분 ${items} 변수..
Querydsl 1. Qdomain 생성 Querydsl 을 사용하기 위해서 Qdomain 생성 Maven의 compile 명령 수행 기존에 존재하던 Entity 객체에 매핑되는 Qdomain 모두 생성 2. 상품 조회 조건 DTO 상품 조회 조건 - 상품 등록일 - 상품 판매 상태 - 상품명 또는 상품 등록자 아이디 상품 조회 조건을 담을 ItemSearchDto 클래스 생성 3. Querydsl & Spring Data Jpa Querydsl 과 Spring Data Jpa 를 함께 사용하기 위해서는 사용자 정의 리포지토리가 필요함 아래와 같은 단계를 거치며 구현하면 됨 ① 사용자 정의 인터페이스 작성 ② 사용자 정의 인터페이스 구현 ③ Spring Data Jpa 리포지토리에서 사용자 정의 인터페이..
상품 수정 1. 상품 조회 상품을 수정하려면 해당 상품을 불러와야 함 따라서, ItemService 에 상품 조회 메소드 추가 (조회 기능이므로 읽기 전용으로 불러옴) - Transactional(readOnly = true) 에 대한 궁금증 (참고) item 엔티티와 img 정보 엔티티를 itemFormDto 객체로 변환 후 반환하는 조회 기능 2. 상품 수정 페이지 Controller 상품 등록 페이지를 동일하게 사용 ("저장" 버튼을 "수정" 버튼으로 출력) 수정 대상 상품의 Id 값을 포함한 Get URL 요청으로 상품 수정 페이지를 요청 해당 상품을 조회한 뒤 itemFormDto 객체를 기반으로 상품 수정 페이지 생성 및 반환 // "/admin/item/{값}" 형태로 URL 요청이 들어오면..
상품 등록 로직 1. application.properties 설정 추가 파일 크기 및 경로 지정 (경로는 프로젝트 외부 디렉토리에 저장함) 2. WebMvcConfigurer 인터페이스 addResourceHandlers 메소드를 오버라이딩하여 파일 업로드 경로 지정 "${uploadPath}" - application.properties 에 설정한 "uploadPath" 프로퍼티 값 " /images/** " 패턴의 URL 은 uploadPath 폴더를 기준으로 탐색 3. 상품 이미지 파일 (File)Service 이미지 파일 저장 로직을 담당할 Service 객체 파일 저장은 DB 에 저장되는 것이 아니기 때문에 Repository 필요 없음 (FileOutputStream 가 대신함) 이미지 파일..
상품 등록 페이지 1. 상품 이미지 Entity Item (상품) Entity 와 다대일 단방향 관계를 갖는 ItemImg Entity 생성 2. modelmapper 라이브러리 추가 상품 등록 화면으로부터 전달받은 DTO 객체를 Entity 로 변환해야함 상품 조회 결과를 화면에 반환할 때 Entity 를 DTO 객체로 변환해야함 modelmapper 라이브러리를 통해서 서로 다른 클래스의 값을 필드의 이름과 자료형이 같으면 getter, setter 를 통해 값을 복사해서 객체를 반환 org.modelmapper modelmapper 2.3.9 3. 상품 관련 DTO 객체 생성 상품을 등록 및 조회할 때 지정된 필드뿐 아니라 추가적인 데이터들의 이동이 많으므로 여러 DTO 이용 상품 이미지에 대한 D..
즉시로딩 1. 즉시로딩 엔티티를 조회할 때 연관된 엔티티도 함께 조회하는 Fetch EAGER 타입 2. 즉시로딩 테스트 OrderItem 객체 조회 3. 즉시로딩 select 쿼리문 OrderItem 엔티티와 연관된 엔티티를 조회하고 연관된 엔티티의 연관된 엔티티 또한 조회 지연로딩 1. 지연로딩 연관된 엔티티는 사용할 때 조회하는 Fetch LAZY 타입 실제 비즈니스 구현 시 매핑되는 엔티티의 개수 ↑ 사용하지 않는 데이터도 한꺼번에 조회하므로 성능 ↓ 2. 지연로딩 설정 @ManyToOne 어노테이션에 fetch 설정 지정 3. 지연로딩 테스트 OrderItem 객체 조회 orderItem.getOrder().getClass() 수행 결과 - 실제 객체가 아닌 프록시 객체를 넣어둠 - 프록시 객체..