0

各注文の広告申込情報を含む、顧客ごとの注文のWebページレポートを作成しようとしています。したがって、次のようになります。

Customer 1  | Order 1  |     Item 1    |
            |          | == New Row == |
            |          |     Item 2    |                     
            |          | == New Row == |
            |          |     Item 3    |                     
            |          | == New Row == |
            | ====== New Row ========= |
            | Order 2  |     Item 1    |                     
            |          | == New Row == |
            |          |     Item 2    |                     
            |          | == New Row == |
            |          |     Item 3    |                     
            |          | == New Row == |
            | ====== New Row ========= |
            | Order 3  |     Item 1    |                     
            |          |     Item 2    |
== New Row ==============================                     
Customer 2  | Order 1  |     Item 1    |                     
            |          | == New Row == |
            |          |     Item 2    |                     
            |          | == New Row == |
            |          |     Item 3    |                     
            |          | == New Row == |
            |          |     Item 4    |                     
            |          | == New Row == |
            |          |     Item 5    |                     
            |          | == New Row == |
            | ====== New Row ========= |
            | Order 2  |     Item 1    |                     
            |          | == New Row == |
            |          |     Item 2    |                     
            |          | == New Row == |
            |          |     Item 3    |                     
== New Row ==============================                     

次のようにデータの配列リストを取得する方が良いですか?

1  | 1 |  1 |                     
1  | 1 |  2 |                     
1  | 1 |  3 |                     
1  | 2 |  1 |                     
1  | 2 |  2 |                     
1  | 2 |  3 |                     
1  | 3 |  1 |                     
1  | 3 |  2 |                     
2  | 1 |  1 |                     
2  | 1 |  2 |                     
2  | 1 |  3 |                     
2  | 1 |  4 |                     
2  | 1 |  5 |                     
2  | 2 |  1 |                     
2  | 2 |  2 |                     
2  | 2 |  3 |                     

1つのJavaBeanを渡し、JSTLを使用して次のようにネストを決定します。

  this is incomplete for brevity
  <table><tr><th>Customer No</th><th>Orders</th></tr>
  <c:forEach var="custOrderLineItem" items="${customerOrderLineItemList}">
  <c:set var="currentOrder" value="custOrderLineItem.orderId">
  <c:set var="currentCustomer" value="custOrderLineItem.customerId">

  <c:if test="${currentOrder != custOrderLineItem.orderId}">
      ==New Row==
  </c:if>

または、ネストされたJavaBeansを使用する方がよい

Customer.setOrders<List>
Orders.setOrderDetails<List>
OrderDetails.setLineItem<List>

その後、JSTLをそのまま使用します

      <c:forEach var="customer" items="${customerList}">
         <c:forEach var="order" items="${customer.orderList}">
             <c:forEach var="lineItem" items="${order.detailList}">

これを書くのに時間を費やした後、私は2番目の方法がよりクリーンで簡単に見えるように感じます。しかし、最初の方法の方がSQLクエリが簡単なようです。私はJPAを使用しておらず、基本的なJDBCSQL呼び出しのみを使用しています。では、JPAを使用せずに、ネストされたJavaBeansをどのように設定するのでしょうか。あなたはこのようなことをしますか?

  List<Customer> custList = getCustomerList();
  ListIterator custListIter = custList.listIterator();
     while (custListIter.hasNext()) {
         customer = (Customer) custListIter.next();
         List<Order> orderList = getOrderList(customer.getId());
         ListIterator orderListIter = orderList.listIterator();
        while (orderListIter.hasNext()) {
                 order = (Order) orderListIter.next();
                 List orderDetailsList<OrderDetail> = getOrderDetailList(order.getId);
                 order.setOrderDetails(orderDetailsList);
                 orderListIter.set(order);
             }
         customer.setOrderList(orderList);
         custListIter.set(customer);
      }
4

1 に答える 1

1

すべてを返すSQLクエリを作成し、結果セットからオブジェクトのグラフを作成するだけです。マップを使用してIDと対応するオブジェクト間の関連付けを維持する:

Map<Long, Customer> customersById = new HashMap<Long, Customer>();
Map<Long, Order> ordersById = new HashMap<Long, Order>();
Map<Long, Item> itemsById = new HashMap<Long, Item>();
while (rs.next()) {
    Long customerId = rs.getLong(1);
    Customer customer = customersById.get(customerId);
    if (customer == null) {
        customer = new Customer(customerId);
        // populate other fields of customer
        customersById.put(customerId, customer);
    }

    Long orderId = rs.getLong(5);
    Order order = ordersById.get(orderId);
    if (order == null) {
        order = new Order(orderId);
        customer.addOrder(order);
        // populate other fields of order
        ordersById.put(orderId, order);
    }

    // same for items

}

ループの最後には、すべての顧客がいて、それぞれに注文があり、それぞれにアイテムがあります。

于 2012-10-18T20:53:11.610 に答える