スプリングを使用した受注リストの作成


スプリングを利用してショッピングモールを作っています.今日は注文書の作成過程についてお話ししたいと思います.まずは完成した映像を公开!(フロントはあまり気になりませんでした:)

現在の受注リストでは、完了した受注のリストしか表示できません.
1.オーダー番号(order code)
2.オーダー日(order date)
3.出荷ステータス(Delivery status)
4.画像サムネイルurl(thumbnail url)
5.商品名(product name)
6.注文数量(product quantity)
「中華人民共和国憲法」の確認性を体現している.
テーブルには注文(Order)、配送(Delivery)、商品(Product)、注文詳細(Order Detail)テーブルが使用されています.
1.注文書、出荷表に署名し、注文番号、注文日、注文状態、出荷状態を照会する.
2.注文番号、商品番号、注文数量、商品名、商品サムネイルurlを商品、注文詳細表で検索しました.

△上のERD写真は、私が理解を助けるために行った項目のうち、一部のERDを導入した写真です.

DB(MySQL)

<select id="getOrderDone" resultType="HashMap" parameterType="Integer">
	SELECT o.order_code, o.order_date, o.order_status, d.delivery_status
	FROM `order` as o INNER JOIN delivery as d
		ON o.order_code=d.order_code
	WHERE o.customer_code=#{customerCode} and o.order_status="done";
</select>
getOrderDoneは、受注テーブルと出荷テーブルを結合し、顧客の受注完了の受注コード、受注日、受注ステータス、および出荷ステータスを検索するクエリー文です.
<select id="getDoneProOdInfo" resultType="HashMap" parameterType="int">
	SELECT o.order_code, o.product_code, o.product_quantity, p.product_name, p.thumbnail_url
	FROM product as p INNER JOIN order_detail as o
		ON p.product_code=o.product_code
	WHERE o.order_code=#{orderCode}
</select>
getDoneProOdInfoは、商品テーブルと注文詳細テーブルに対応する商品コード、注文数、商品名、サムネイルurlを取得するクエリー文です.

最終目標


各注文コードには複数の商品を含めることができます.そこで,上記の2つのクエリ文で得られた2つの結果を統合し,次のようなJSON形式のサービス関数を記述した.
[{"order_code": , 	
  "order_date": ,
  "order_status": ,
  "odProInfo":[
  	{"order_code": ,
    	 "product_code": ,
    	 "thumbnail_url": ,
         "product_name": ,
         "product_quantity": 
     	}, 
        {"order_code": ,
         "product_code": ,
    	 "thumbnail_url": ,
         "product_name": ,
         "product_quantity":
     	}, ...
   ], 
   "delivery_status":
  },
  {"order_code": ,	
  "order_date": ,
  "order_status": ,
  "odProInfo":[
  	{"order_code": ,
    	 "product_code": ,
    	 "thumbnail_url": , 
         "product_name": ,
         "product_quantity":
     	}, 
        {"order_code": , 
         "product_code": , 
    	 "thumbnail_url": , 
         "product_name": , 
         "product_quantity": 
     	}, ...
   ], 
   "delivery_status":
  },...
 ]
   
1つの注文コードに関連するデータはgetOrderDoneクエリで取得でき、各注文コードの商品に関連するデータはgetDoneProdInfoクエリで取得できます.

サービス関数


上のJSONデータ構造にクライアントコードを渡す関数を作成しました.△まだ初心者なので、コードがごちゃごちゃしているように見えます.丁寧に書かれたコードですので、ごフィードバックください.
public List<HashMap<String, Object>> getOrderDone(Integer customerCode) {
	//마지막으로 리턴할 List 객체(위의 JSON 형태의 데이터)
	List<HashMap<String, Object>> orDoneInfoLi = new ArrayList<HashMap<String, Object>>();
	//고객코드를 통해 해당 고객의 주문완료된 리스트를 얻어옵니다.(JSON 데이터에서 odProInfo를 제외한 모든 데이터를 검색합니다.)
	List<HashMap<String, Object>> ordeliInfoes = orderMapper.getOrderDone(customerCode);
		
	for (HashMap<String, Object> ordeliInfo:ordeliInfoes) {
		//하나의 주문코드에 대한 정보를 담고 있는 해시맵 객체입니다.
		HashMap<String, Object> orDoneInfoHm = new HashMap<String, Object>();
			
		//하나의 주문코드에 담기는 정보들 중 상품과 관련된(odProInfo) 데이터를 제외한 모든 데이터를 해당 해시맵 객체에 저장합니다.
		orDoneInfoHm.put("order_code", ordeliInfo.get("order_code"));
		orDoneInfoHm.put("order_date", ordeliInfo.get("order_date"));
		orDoneInfoHm.put("order_status", ordeliInfo.get("order_status"));
		orDoneInfoHm.put("delivery_status", ordeliInfo.get("delivery_status"));
		log.info(orDoneInfoHm.toString());	//출력 결과 1번
			
		//하나의 주문코드에 담기는 모든 상품들에 대한 데이터를 가지는 List 객체를 생성합니다.
		List<HashMap<String, Object>> odProInfoLi = 
					odMapper.getDoneProOdInfo(Integer.parseInt(ordeliInfo.get("order_code").toString()));
		log.info(odProInfoLi.toString());	//출력 결과 2번
			
		//주문코드에 담기는 정보들 중 아까 담지 못했던 상품에 관한 정보를 저장합니다.
		orDoneInfoHm.put("odProInfo", odProInfoLi);
		log.info(orDoneInfoHm.toString());	//출력 결과 3번
			
		//최종 리턴되는 List 객체에 하나의 주문정보를 저장합니다.
		orDoneInfoLi.add(orDoneInfoHm);
	}
	log.info(orDoneInfoLi.toString());	//최종 리턴되는 결과
    
	return orDoneInfoLi;
}

出力結果1例

{order_code=208, 
 order_date=2021-02-21 10:01:10.0, 
 order_status=done, 
 delivery_status=preparing}
注文コードに含まれている商品に関する情報(ODProInfo)以外は、すべて注文コードに格納されていることが確認できます.

出力結果2例

[
 {order_code=208, 
  product_code=6, 
  thumbnail_url=none.png, 
  product_name=나이키 볼캡, 
  product_quantity=5}, 
 {order_code=208, 
  product_code=17, 
  thumbnail_url=none.png, 
  product_name=카파 롱패딩, 
  product_quantity=1}, 
 {order_code=208, 
  product_code=16, 
  thumbnail_url=none.png, 
  product_name=아디다스 비니, 
  product_quantity=1}
]
注文番号208番の商品の情報が保存されていることを確認できます.

出力結果3例

{order_code=208, 
 order_date=2021-02-21 10:01:10.0, 
 order_status=done, 
 odProInfo=[
 	{order_code=208, 
 	 product_code=6, 
     	 thumbnail_url=none.png, 
     	 product_name=나이키 볼캡, 
     	 product_quantity=5}, 
    	{order_code=208, 
         product_code=17, 
         thumbnail_url=none.png, 
         product_name=카파 롱패딩, 
         product_quantity=1}, 
        {order_code=208, 
         product_code=16, 
         thumbnail_url=none.png, 
         product_name=아디다스 비니, 
         product_quantity=1}
        ], 
delivery_status=preparing}
注文番号208のすべてのデータが保存されていることを確認できます.

最終的に返された結果

[{order_code=208, 
 order_date=2021-02-21 10:01:10.0, 
 order_status=done, 
 odProInfo=[
 	{order_code=208, 
  	 product_code=6, 
   	 thumbnail_url=none.png, 
  	 product_name=나이키 볼캡, 
  	 product_quantity=5}, 
 	{order_code=208, 
 	 product_code=17, 
 	 thumbnail_url=none.png, 
  	 product_name=카파 롱패딩, 
  	 product_quantity=1}, 
  	{order_code=208, 
	 product_code=16, 
 	 thumbnail_url=none.png, 
 	 product_name=아디다스 비니, 
  	 product_quantity=1}], 
 delivery_status=preparing}, 
{order_code=211, 
 order_date=2021-02-21 11:23:30.0, 
 order_status=done, 
 odProInfo=[
 	{order_code=211, 
 	 product_code=18, 
  	 thumbnail_url=none.png, 
  	 product_name=컨버스 신발, 
   	 product_quantity=1}], 
 delivery_status=preparing}, 
{order_code=214, 
 order_date=2021-02-22 08:12:46.0, 
 order_status=done, 
 odProInfo=[
 	{order_code=214, 
  	 product_code=3, 
   	 thumbnail_url=none.png, 
   	 product_name=FILA 운동화, 
   	 product_quantity=2}], 
 delivery_status=preparing}
]
こうしてオーダーリストページの実装が完了...!
私のコメントを読んでいる人の中でもっと良い方法があれば、ぜひメッセージやメールを送ってください:)