레포지토리를 만들어 DB에 저장
orders
테이블에 order_items
테이블을 JSON형태로 집어넣는 방법도 있다.order_items
는 orders
의 하위 테이블이므로 따로 PRIMARY KEY를 갖지 않고 자동 증가하는 시퀀스로 선언 seq bigint NOT NULL PRIMARY KEY AUTO_INCREMENT
order_id
로 검색이 잦기 때문에 인덱스 설정기능 : Order를 추가하고 Order의 order_items만큼 insert를 해야한다.
paraMap.put("email", order.getEmail().getAddress()); // VO에서 address를 가져와야 한다.
-> 무슨 의미?의문
왜 ProductJdbcRepository의 insert에서는 @Transactional처리를 하지 않았을까?기능 : OrderJdbcRepository를 사용하여 주문 추가 비즈니스 로직을 처리하는 서비스 생성. 그 서비스를 조작하는 컨트롤러도 생성한다.
DAO, DTO, VO
DAO
DTO
VO
흐름
출처 : https://melonicedlatte.com/2021/07/24/231500.html
오류 발생
java.lang.IllegalArgumentException: address should not be null
reateOrder
메소드의 인자에 @RequestBody
어노테이션을 붙이지 않음오류 발생
OrderJdbcRepository
에서INSERT INTO 테이블(테이블 필드명1, 필드명2 ...)" + "VALUES (model 클래스의 필드명1, 필드명2 ...)
코드작성 시 실수를 함. model 클래스의 필드명을 snake case로 작성함.오류 발생
java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
에러가 지속적으로 발생원인
: (UNHEX(REPLACE(:orderId, '-', '')))
문법의 괄호를 제대로 닫지 않음오류 발생
SQLSyntaxErrorException
이 지속적으로 발생하여 SQL 문법을 5.7ver -> 8.0 이후 버전의 문법으로 변경함. 그러나 변경 이후 NullPointException
발생리액트 화면에서 입력하고 결제하기 버튼 클릭 -> 주문정보가 제출되어 주문관리 API를 통해 DB에 저장된다.
오류발생
오류발생
react-jsx-dev-runtime.development.js:87 Warning: Each child in a list should have a unique "key" prop.
오류 발생id
-> productId
로 변경해주었다.id
-> productId
로 변경Summary에서 입력받는 것은 주문정보. 따라서 이용자가 입력하는 타이핑에 대한 상태 관리가 필요하다.
onChange={}
필드 변경 시 이벤트를 잡아내서 order에 연결해야 함changeInput
이 호출된다.오류발생
Warning: A component is changing an uncontrolled input to be controlled. This is likely caused by the value changing from undefined to a defined value, which should not happen. Decide between using a controlled or uncontrolled input element for the lifetime of the component.
이제 input이 state와 연결이 되고, 각 이벤트 발생 시마다 값을 변경한 뒤 value속성에 바인딩.
react controller component
요소
가 리액트 상태
와 연결된 것요소
가 리액트 상태
와 연결되지 않은 것결제하기 버튼을 누르면 주문결과 출력
입력값에 대한 검증 skip -> 다음 개인 프로젝트에는 진행시켜보자
실제 form처리에서는 검증
할 것이 많은데 프론트엔드 과정이라면 다른 라이브러리를 이용해 검증 처리 했을 것
그리고 폼을 보낸 이후 clear 작업도 진행해야 하지만 프론트엔드 과정이기 때문에 생략
Summary에 추가된 값은 부모(App)에 있다.
흐름 : 결제 버튼을 누르면 주문 정보
가 합쳐져서 http POST
-> 서버요청
props
를 통해 처리한다. (props는 객체 데이터를 Argument로 전달할 수 있게 해준다.)onOrderSubmit
메소드를 호출하면 order를 전달해준다.
App.js에서 Summary를 사용하고 있는 부분 -> onOrderSubmit={{handleOrderSubmit}
추가
axios.post(url
, {json형태로 데이터 정의
})
매핑 처리 - UI에서의 변수명과 서버단의 변수명이 다를 수 있으니 매핑 처리 중요
오류 발생
Access to XMLHttpRequest at 'http://localhost:8080/api/v1/products' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
products
api의 url로 잘못 작성한 것. CORS는 죄가 없다.리덕스
와 몹엑스