728x90
뭐 제목은 거창하지만 내용은 별거 없을것 같다. 어로그 끌어서 미안하지만 …
일단 설명을 하자면 NPE를 방지하기 위한 노력은 예전부터 많은 JAVA 개발자들이 세세대대 이어져왔다.
아직도 개발도중에 NPE 은 우리를 항상 괴롭히기도 한다.
뭐 아시다싶이 apache Commons Utils 를 이용하여 String , Object 에 대한 null 체크를 대부분은 하고 있다. 하지만 오늘 얘기할 부분은 Optional 클래스에 위임하는 방식이니 이해하고 그냥 읽어만 달라.
가끈 팀프로젝트에서 해당 클래스를 이용해서 null 체크하라는 지시가 있을때 하려고하면 항상 까먹곤 하니 오늘 좀 자주쓰는 부분을 적어보자.
public OrderDto getOrderDto(Long orderId) {
QOrder order = QOrder.order;
QUser user = QUser.user;
QItem item = QItem.item;
OrderDto orderDto = queryFactory
.select(Projections.constructor(OrderDto.class, order, user))
.from(order)
.leftJoin(order.user, user)
.where(order.id.eq(orderId))
.fetchOne();
if (orderDto == null) {
throw new NotFoundException("Order not found");
}
List<OrderItemDto> orderItemDtos = queryFactory
.select(Projections.constructor(OrderItemDto.class, item))
.from(orderItem)
.join(orderItem.item, item)
.where(orderItem.order.id.eq(orderId))
.fetch();
orderDto.setOrderItemDtos(orderItemDtos);
return orderDto;
}
아래와 같이 개선 해보았다.
public OrderDto getOrderDto(Long orderId) {
QOrder order = QOrder.order;
QUser user = QUser.user;
QItem item = QItem.item;
OrderDto orderDto = queryFactory
.select(Projections.constructor(OrderDto.class, order, user))
.from(order)
.leftJoin(order.user, user)
.where(order.id.eq(orderId))
.fetchOneOptional()
.orElseThrow(() -> new NotFoundException("Order not found"));
List<OrderItemDto> orderItemDtos = queryFactory
.select(Projections.constructor(OrderItemDto.class, item))
.from(orderItem)
.join(orderItem.item, item)
.where(orderItem.order.id.eq(orderId))
.fetch();
orderDto.setOrderItemDtos(orderItemDtos);
return orderDto;
}
내저장소 바로가기 luxury515
'Back-end > 기타' 카테고리의 다른 글
gradle bootrun 작동 에러 (0) | 2023.04.14 |
---|---|
radius(레이디스)서버 (0) | 2023.04.14 |
tomcat m1 설정 (0) | 2023.04.13 |
IPv6 와 IPv4 를 비교했을때 장점은 뭐지? (0) | 2023.04.13 |
equals()와 hashCode() 에 대한 고찰 (0) | 2023.04.13 |