需求分析
实际需要的最终效果
库中数据的存储格式
xml配置文件
<select id="findArLists" parameterType="Object" resultType="hashmap">
SELECT
*
FROM
(
SELECT
s.item,
s.sbb_c AS Charactor,
s.sbb_v AS Value,
s.sbb AS SBB_ID,
'X' AS item_desc,
'X' AS plant,
s.geo,
s.subgeo,
'CTO_SBB' AS item_type,
s.family AS product_family,
'AI' AS wk_fcst,
s.MONTH as bucket,
s.MANU_INPUT_AR AS ar
FROM
PR_UI_SBB_MONTH s
) pivot (
sum( ar ) FOR bucket IN
<foreach collection="monthList" index="index" item = "item" open="(" close =")" separator=",">
'${item.month}' as ${item.column}
</foreach>
)
</select>
此处需要逐一指定对应得属性名称,此处不一一列举,直接select * 所有
Mapper配置文件
List<Map<String, Object>> findArLists(@Param("monthList")List<Map<String, String>> monthList);
此处注意,因为没有指定返回映射,直接使用List
请求入参说明
说明: oracle库会将入参的小写,全部转换为大写,需要额外注意,避免踩坑,导致数据接收后后续处理错误问题
public List<Map<String,String>> processRequestParameter(List<String> buckets){
List<Map<String,String>> parameters = Lists.newLinkedList();
Integer total = 0;
for (String month : buckets){
HashMap<String, String> map = Maps.newHashMap();
map.put("month",month);
map.put("column","YS_"+total);
total++;
parameters.add(map);
}
return parameters;
}
此处需要额外注意,因为所需数据的列不确定,所以传递进XML文件中行转列的列名需要逐一指定 当数据库中某几个月分缺失时,不会进行额外补齐,需要自己手动补齐
这样我们就实现了在Java代码中整合Oracle库中行转列参数的接收,其中一些踩过的坑,没来的及截图,此处不一一列举,
该处理方式,亲测可用,可是实现在不确定时间日期的情况下,动态的接收行转列的数据