ssung_항해일지/항해99_실전 프로젝트

실전 프로젝트 - 12일차

ssungcohol 2023. 3. 21. 23:23
// JPQL
public List<Order> findAllByString(OrderSearch orderSearch) {
   String jpql = "select o From Order o join o.member m";
   boolean isFirstCondition = true;
   //주문 상태 검색
   if (orderSearch.getOrderStatus() != null) {
      if (isFirstCondition) {
         jpql += " where";
         isFirstCondition = false;
      } else {
         jpql += " and";
      }
      jpql += " o.status = :status";
   }
   //회원 이름 검색
   if (StringUtils.hasText(orderSearch.getMemberName())) {
      if (isFirstCondition) {
         jpql += " where";
         isFirstCondition = false;
      } else {
         jpql += " and";
      }
      jpql += " m.name like :name";
   }
   TypedQuery<Order> query = em.createQuery(jpql, Order.class).setMaxResults(1000); //최대 1000건
   
   if (orderSearch.getOrderStatus() != null) {
      query = query.setParameter("status", orderSearch.getOrderStatus());
   }
   if (StringUtils.hasText(orderSearch.getMemberName())) {
      query = query.setParameter("name", orderSearch.getMemberName());
   }
   return query.getResultList();
}

// QueryDSL
public List<Order> findAll(OrderSearch orderSearch) {
   QOrder order = QOrder.order;
   QMember member = QMember.member;
   return query
      .select(order)
      .from(order)
      .join(order.member, member)
      .where(statusEq(orderSearch.getOrderStatus()),
         nameLike(orderSearch.getMemberName()))
      .limit(1000)
      .fetch();
}

private BooleanExpression statusEq(OrderStatus statusCond) {
   if (statusCond == null) {
      return null;
   }
   return order.status.eq(statusCond);
}

private BooleanExpression nameLike(String nameCond) {
   if (!StringUtils.hasText(nameCond)) {
      return null;
   }
   return member.name.like(nameCond);
}

DB PK (Primery key) 특성

  • PK는 레코드(Table의 row)의 위치를 결정하므로 신중하게 결정해야함
  • PK가 유사한 레코드끼리 묶어서 저장 => 클러스터링이라고 말함
    (PK를 클러스터 인덱스라고 칭함. 일반 인덱스는 논클러스터 인덱스)
  • 이러한 특정으로 레코드 저장 또는 PK 변경 처리 속도가 느리다
    • 우선 레코드를 추가하기 위해 PK 기반으로 저장 위치를 탐색하고, PK변경을 위해서는 레코드가 저장된 물리적 위치를 변경하는 작업이 수반되기에 처리 속도가 느릴 수 밖에 없음
728x90