일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- ajax
- mysql
- FCM
- javascript
- Tomcat
- Push
- jquery
- Maven
- NextJS
- spring3
- centos7
- git
- popup
- SpringBoot
- nodejs
- Java
- pwa
- yona
- config
- MSsql
- jenkins
- docker
- security
- mybatis
- PM2
- node.js
- Eclipse
- Next.js
- rocky9
- MariaDB
- Today
- Total
ふたりで
jstl forEach 동적 items의 key 참조?? 본문
public List<Map<String, Object>> getOrderDeliveryInfoList(SearchParamOrderListBySupplierVO searchParam) {
return supplierMapper.selectOrderDeliveryList(searchParam);
}
특정 리스트가 있다 해당 리스트의 컬럼명은 쿼리상에서도 갯수가 가변적으로
변하며 넘어 오게 만들었다... 란 가정하에 jstl에서도 해당 컬럼에 맞게끔
조건에따라 가변적으로 변하게 해줘야 한다.
1. 동적 컬럼결과를 출력 하는 쿼리.
2. 해당 쿼리 관련 mybatis 사용법
3. jstl에서 동적 key 참조 처리.
#. query+mybatis : 아래 소스는 상품별 수량을 조회하는 기본 쿼리에 매장리스트 만큼 루프를 돌며
JOIN하여 결과를 출력 해 줄수 있게 mybatis를 적용한 내용이다.
(주문 코드 갯수와 기준 매장의 갯수는 선택한 매장 만큼 유동적이다.)
<select id="selectOrderList" resultType="java.util.LinkedHashMap">
SELECT
ord_code AS ordCode
, goods_barcode AS sGoodsBarcode
, goods_name AS sGoodsName
, SUM(qtysum) AS sQtysumTotal
<foreach collection="martList" item="item" index="index" separator="" open="" close="">
,SUM(IFNULL(qtysum_${item.martCode},0)) AS sQtysumTotal_${item.martCode}
</foreach>
FROM(
SELECT
ord_code
, goods_barcode
, goods_name
, goods_sspec
, qtysum
FROM ORDER_LIST AS SOL
WHERE SOL.bizno = #{Bizno}
AND SDD.sordd_code IN
<foreach collection="ordCodeArray" item="ordCodeArray" index="index" open="(" close=")" separator=",">
#{ordCodeArray}
</foreach>
) MA
<foreach collection="martList" item="item" index="index" separator="" open="" close="">
LEFT JOIN
(
SELECT
ord_code AS ordCode_${item.sordMart}
,goods_barcode AS goods_barcode_${item.martCode}
,qtysum AS qtysum_${item.martCode}
FROM SUPPLIER_ORDER_LIST AS SOL
WHERE SOL.sord_sup_bizno = #{Bizno}
AND SOL.mart = ${item.martCode}
AND SDD.ord_code IN
<foreach collection="ordCodeArray" item="ordCodeArray" index="index" open="(" close=")" separator=",">
#{ordCodeArray}
</foreach>
) `${item.martCode}`
ON MA.goods_barcode = `${item.martCode}`.ord_goods_barcode_${item.martCode}
</foreach>
WHERE 1=1
GROUP BY MA.goods_barcode
;
</select>
#. jstl 에서의 처리 아래 jstl에서는 기본적으로 orderInfoList를 출력 하며, 추가로 td 를 매장 수만큼 가변적으로
표시해 줘야 하기에 martList를 참조하며 td를 표시한다.
주!! 동적 컬럼Key가 매핑 되는 부분은 c:set 부분(value="QtysumTotal_${c.martCode}")과 바로 아래 td 부분에 key맵핑을 한곳이다 ${p[name]} 이렇게 하면 jstl에서 forEach사용시 상위 리스트값을 동적으로 참조 할 수 있다.
<c:forEach var="p" items="${orderInfoList}" varStatus="status">
<tr>
<td class="text_center">
${status.index+1}
</td>
<td class="text_center">${p.sGoodsBarcode}</td>
<td class="text_left">${p.sGoodsName}</td>
<td class="text_center">${p.sGoodsSspec}</td>
<td class="text_rigth">${p.sQtysumTotal}</td>
<c:forEach var="c" items="${martList}">
<c:set var="name" value="QtysumTotal_${c.sordMart }"/>
<td class="text_rigth">${p[name]}</td>
</c:forEach>
</tr>
</c:forEach>
# 참고로 mybatis 쿼리 부분에서 resultType을 java.util.LinkedHashMap 으로 받기 때문에 DAO 부분에서는 아래와 같이
List<map<string, object>>로 해주어야 한다.(아래는 서비스에서 mapper로 바로 호출 하는 방식)
중요한건 List<Map<String, Object>>
public List<Map<String, Object>> getOrderDeliveryInfoList(SearchParamVO searchParam) {
return Mapper.selectOrderDeliveryList(searchParam);
}
'Other' 카테고리의 다른 글
MS-SQL 테이블 컬럼 삭제시 개체 종속 ERROR 'DF_ ...' (0) | 2021.10.21 |
---|---|
VS-CODE console.log(); 에러 해결... (0) | 2021.08.30 |
tail 특정 줄 수 만큼 출력 (0) | 2020.12.03 |
Swagger-Hub 와 API서버 연동 하기 (0) | 2020.12.01 |
eclipse(sts) + yona(git)연동 (0) | 2020.12.01 |