분류 전체보기 954

18. 주문 기능 테스트

@Test public void 상품주문(){ Member member = new Member(); member.setUsername("회원1"); member.setAddress(new Address("서울", "강가", "123-123")); em.persist(member); Item book = new Book(); book.setName("시골 JPA"); book.setPrice(10000); book.setStockQuantity(10); em.persist(book); int orderCount = 2; Long orderId = orderSerivce.order(member.getId(), book.getId(), orderCount); Item findBook = itemService...

제약조건

제약조건으로 테이블 견고하게 함 데이터의 무결성을 지키기 위해 하는 것 primary key 등 primary key : 중복 방지, 빈 여백 허용 안됨. 식별키. 테이블 중 하나만 가능 foreign key : 두 테이블을 연결할 때, 그 연결 사이의 무결성을 보장해주는. 외래키의 값이 대상테이블에 존재 해야만 함. unique : 중복 방지, 빈 여백 허용. check : 조건 부여하면 조건에 부합하지 않는 데이터 입력시 걸러줌. 말 그대로 체크 default : 기본값. 딱히 설정 안할 시 null 대신 넣어지는 거? not null : null 방지 그럼 unique에다가 not null 하면 primary key랑 비슷할 듯 외래키로 다른 테이블과 맺어진 후 이 왜래키 값은 변경하거나 바꿀 수 ..

DB 2023.11.08

17. 주문 리포지토리, 서비스

리포지토리 @Repository @RequiredArgsConstructor public class OrderRepository { private final EntityManager em; public void save(Order order){ em.persist(order); } public Order findOne(Long orderId){ return em.find(Order.class, orderId); } // public List findAll(OrderSearch orderSearch){} } 간단하게 주문 저장, 주문 하나 가져오기. 그런데 여러개 가져오는데, 검색 옵션에 따라 가져오기. 저건 동적 쿼리가 필요해서 나중에 따로 함. 서비스 기능 요구 사항은 주문 조회 주문 주문 취소 먼저 ..

동적 SQL

동적 쿼리 아니다. 동적 SQL은 sql을 준비해뒀다가 원하는 타이밍에 실행 하는 거다. prepare myQuery from 'select * from member where mem_id = "BLK"'; execute myQuery; deallocate prepare myQuery; 저렇게 prepare 해서 쿼리를 저장해 뒀다가, excute 하면서 실행하면 된다. 그리고 deallocate prepare 해 주면서 해제해줘야 한다. 약간 동적 메모리 해제해주는 그거 같다. prepare 준비할쿼리명 from '쿼리'; execute 준비할쿼리명; deallocate prepare 준비할쿼리명; 인자주기. set @currDate = current_timestamp(); set @aaa = 'asd..

DB 2023.11.07

16. 주문 도메인 개발

주문, 주문상품 엔티티 개발 주문 리포지토리 개발 주문 서비스 개발 주문 기능 테스트 주문 검색 기능 테스트 구현 기능 상품 주문 주문 내역 조회 주문 취소 일단 주문 엔티티 개발 public static Order createOrder(Member member, Delivery delivery, OrderItem... orderItems){ Order order = new Order(); order.changeMember(member); order.changeDelivery(delivery); for (OrderItem orderItem : orderItems) { order.addOrderItem(orderItem); } order.setStatus(OrderStatus.ORDER); order.se..

15. 상품 개발

상품 엔티티 개발(비즈니스 로직) 상품 리포지토리 개발 상품 서비스 개발 상품 등록 상품 목록 조회 상품 수정 @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = "dtype") @Getter public abstract class Item { @Id @GeneratedValue @Column(name = "item_id") private Long id; private String name; private int price; private int stockQuantity; @ManyToMany(mappedBy = "items") private List categories = new ArrayLis..

14. 회원 테스트

테스트 요구사항 회원가입 성공 회원가입 시 같은 이름이 있을 시 예외 발생 @SpringBootTest @Transactional class MemberServiceTest { @Autowired MemberService memberService; @Test public void 회원가입(){ Member member = new Member(); member.setName("memberA"); Long savedMemberId = memberService.join(member); Member findMember = memberService.findOne(savedMemberId); assertThat(member).isEqualTo(findMember); } @Test public void 중복_회원_예..

스토어드 프로시저

스토어드 프로시저는 SQL에 프로그래밍 기능을 추가해 프로그래밍 처럼 다룰 수 있음. DELIMITER $$ CREATE PROCEDURE ifProc1() BEGIN if 100 = 100 then select '100 is equals 100'; end if; END $$ DELIMITER ; call ifProc1(); delimiter $$ create procedure 프로시저명 begin 프로그래밍 end $$ delimiter ; 기본 구조는 이거고, call 프로시저(); 가 실행 그냥 조건에 따라 sql문을 실행하도록 하는 게 목적인 듯. 반복적으로 하거나 변수 등 활용할 수 있고 if문 if (days/365) >= 5 then select '데뷔한 지 ', days, '일이 지났습니다..

DB 2023.11.06