[코스파] 스프링 기초 4주차-2

2022. 1. 2.·강의정리들/[2021] Spring Boot
목차
  1. 관심 상품 조회하기
  2. 관심 상품 등록하기
  3.  
  4. 키워드로 상품 검색하기
반응형

프로젝트 만들기

관심 상품 조회하기

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 에서 새로고침 버튼 클릭

 

rjson  으로 검색 결과가  items  배열 속에 들어가 있는 모습  > json  배열  [{}, {}]
JSONArray  형태로  items  배열을 꺼내고 출력 한 모습  / for  문 이용
JSONObject  에서  String  과  int  데이터를 추출해서 출력

 

 

반응형

'강의정리들 > [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
  1. 관심 상품 조회하기
  2. 관심 상품 등록하기
  3.  
  4. 키워드로 상품 검색하기
'강의정리들/[2021] Spring Boot' 카테고리의 다른 글
  • [코스파] 스프링 기초 4주차-4
  • [코스파] 스프링 기초 4주차-3
  • [코스파] 스프링 기초 4주차-1
  • [코스파] 스프링 기초 3주차
keartt
keartt
shalpha_2@naver.com
주니어 탈출일기 🐽
shalpha_2@naver.com
  • keartt
전체
오늘
어제
  • 전체보기
    • CS & 알고리즘
      • CS (컴과학)
      • 알고리즘
      • 백준
    • Spring
      • SpringBoot (JPA)
      • Spring (Legacy)
    • Server
      • Linux
      • Docker
    • Java
      • Design Pattern
    • PostgreSQL
    • GIS (공간정보)
    • 오류정리
    • Git
    • JavaScript
      • Node.js
      • React
    • Tool
      • IntelliJ
      • MacOS
      • VSCode
      • Eclipse
      • Other
    • 강의정리들
      • [2023] FullStack
      • [2022] Spring Boot
      • [2021] Spring Boot

인기 글

태그

이분탐색
코딩애플
구간합
브루트포스
반응형
hELLO· Designed By정상우.v4.6.1
keartt
[코스파] 스프링 기초 4주차-2

개인정보

kearttshalpha_2@naver.com계정관리

운영중인 블로그

주니어 탈출일기쓰기블로그 관리

이동링크목록

  • 티스토리 홈
  • 피드
  • 로그아웃
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.