프로젝트 만들기
관심 상품 조회하기
1. 타임 스탬프 클래스 만들기
src > main > java > com.sparta.week04 에 models 패키지 생성
models 패키지 내부에 Timestamped.java 생성
@Getter // get 함수를 자동 생성합니다.
@MappedSuperclass // 멤버 변수가 컬럼이 되도록 합니다.
@EntityListeners(AuditingEntityListener.class) // 변경되었을 때 자동으로 기록합니다.
public abstract class Timestamped {
@CreatedDate // 최초 생성 시점
private LocalDateTime createdAt;
@LastModifiedDate // 마지막 변경 시점
private LocalDateTime modifiedAt;
}
Week04Application 에 아래 두줄 추가
@EnableJpaAuditing // 시간 자동 변경이 가능하도록 합니다.
@SpringBootApplication // 스프링 부트임을 선언합니다.
2. 프로덕트 클래스 만들기
models 패키지 내부에 Product.java 생성
title / image / link / lprice / myprice (관심가격) 정보 필요!
@Getter // private 이므로 넣어야 함
@NoArgsConstructor // 기본 생성자는 항상 들어가야 함
@Entity // DB 테이블 역할을 합니다.
public class Product extends Timestamped{
// ID가 자동으로 생성 및 증가합니다.
@GeneratedValue(strategy = GenerationType.AUTO)
@Id
private Long id;
@Column(nullable = false) // 필수로 가지고 있어야 함을 뜻함
private String title;
@Column(nullable = false)
private String image;
@Column(nullable = false)
private String link;
@Column(nullable = false)
private int lprice;
@Column(nullable = false)
private int myprice;
}
3. ProductRepository 만들기
models 내부에 인터페이스로! ProductRepository.java 생성
public interface ProductRepository extends JpaRepository<Product, Long> {
} // JpaRepository 기능을 사용할 것이므로 상속 / Product 를 Long 형태로=
4. ProductRestController 만들기
controller 패키지 만들고 패키지 내부에 ProductRestController.java 생성
@RequiredArgsConstructor // final로 선언된 멤버 변수를 자동으로 생성합니다.
@RestController // JSON으로 데이터를 주고받음을 선언합니다.
public class ProductRestController {
private final ProductRepository productRepository; // 원할떄마다 생성하려면 꼭 필요한 것임을 알려줘야 함 > final
// 등록된 전체 상품 목록 조회
@GetMapping("/api/products")
public List<Product> getProducts() { // public 반환형 메소드명(재료)
return productRepository.findAll();
}
}
관심 상품 등록하기
검색한 후 등록을 눌렀을 때, 관심 상품이 생성
> 검색결과에서 제목, 이미지, 링크, 최저가 를 가져와야 함
1. Dto 클래스 만들기
models 패키지 내부에
A. ProductRequestDto : 관심 상품 등록 > 상품 생성과 관련 title, link, image, lprice
@Getter
public class ProductRequestDto {
private String title;
private String link;
private String image;
private int lprice;
}
B. ProductMypriceRequestDto : 관심 가격 변경 > myprice
@Getter
public class ProductMypriceRequestDto {
private int myprice;
}
2. RequestDto 를 받아서 생성해야 하므로 생성자가 필요하다.
Product 클래스를 수정해야 함. 아래 두 생성자 추가
public Product(ProductRequestDto requestDto){
this.title = requestDto.getTitle();
this.link = requestDto.getLink();;
this.image = requestDto.getImage();;
this.lprice = requestDto.getLprice();
this.myprice = 0; // 사용자가 설정한 가격보다 가격이 낮을 때만 최저가 표시를 해야 하므로 myprice 기본값을 0으로 둠
}
public Product(ProductMypriceRequestDto mypriceRequestDto){
this.myprice=mypriceRequestDto.getMyprice();
}
3. ProductService 패키지 만들기
domain 패키지 생성후, 패키지 내부에 ProductService.java 생성
@RequiredArgsConstructor // final로 선언된 멤버 변수를 자동으로 생성합니다.
@Service // 서비스임을 선언합니다.
public class ProductService {
private final ProductRepository productRepository; // 항상필요하면? private final
@Transactional // 메소드 동작이 SQL 쿼리문임을 선언. DB 변경 시 필수!!!!
public Long update(Long id, ProductMypriceRequestDto requestDto) { // void 로 해도 가능
Product product = productRepository.findById(id).orElseThrow(
() -> new NullPointerException("해당 아이디가 존재하지 않습니다.")
);
product.update(requestDto);
return id;
}
}
Ø 생성했으면 Product 로 돌아가서 update 메소드를 만들어야 함
public void update(ProductMypriceRequestDto requestDto){
this.myprice=requestDto.getMyprice();
}
Ø ProductRestController 에 post 추가
// 신규 상품 등록
@PostMapping("/api/products")
public Product createProduct(@RequestBody ProductRequestDto requestDto) {
Product product = new Product(requestDto);
productRepository.save(product);
return product;
}
키워드로 상품 검색하기
NaverShopSearch 클래스를 변경해야 함
1. 검색어를 요구에 따라 바꿀 수 있도록 변경 : +query
2. 검색 결과를 문자열에서 Dto 로 변경
org.json 패키지 설치하기
JSON을 자바에서 다루기 위해 JSONObject 와 JSONArray 클래스가 필요함
1. 구글에 maven repository 검색 후 첫 번째 결과 클릭
2. 검색창에 json 입력 후 엔터
3. JSON In Java 클릭
4. 숫자 가장 높은 버전 클릭
5. Gradle 탭 클릭
6. 내용 복사하여 build.gradle > dependencies 안에 붙여넣기
7. dependencies 옆의 Run 버튼 클릭
8. 우측 Gradle 에서 새로고침 버튼 클릭
'강의정리들 > [2021] Spring Boot' 카테고리의 다른 글
[코스파] 스프링 기초 4주차-4 (0) | 2022.01.11 |
---|---|
[코스파] 스프링 기초 4주차-3 (0) | 2022.01.02 |
[코스파] 스프링 기초 4주차-1 (0) | 2022.01.02 |
[코스파] 스프링 기초 3주차 (0) | 2022.01.01 |
[코스파] 스프링 기초 2주차-3 (0) | 2021.12.05 |