Mybatis整合Oracle库行转列实现

需求分析

实际需要的最终效果

在这里插入图片描述

库中数据的存储格式

在这里插入图片描述

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库中行转列参数的接收,其中一些踩过的坑,没来的及截图,此处不一一列举,
该处理方式,亲测可用,可是实现在不确定时间日期的情况下,动态的接收行转列的数据
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值