Mybatis 行专列详解


1、原来是下图的效果


2、需要根据日期转成下图这样的效果,由于是静态SQL,所以日期只有两天的,后面会说到动态SQL

3、行专列SQL如下

SELECT sch_name, 

    MAX(CASE class_date WHEN '2019-10-08' THEN num ELSE 0 END) '2019-10-08',

    MAX(CASE class_date WHEN '2019-10-09' THEN num ELSE 0 END) '2019-10-09'

FROM scheduling_check

WHERE sch_name != ""

GROUP BY sch_name;

4、如果需要动态SQL,在Mapper中使用@Select拼接SQL,用foreach遍历日期,用List<Map<String, Object>>接收;

4.1 Mapper

    @Select({"<script>",
                "SELECT sch_name,",
                "<foreach index = \"index\" item = \"item\" collection = \"param.classDates\" open= \"\" separator=\",\" close=\"\">",
                    "MAX(CASE class_date WHEN #{item} THEN num ELSE 0 END) as #{item}",
                "</foreach>",
                "FROM scheduling_check ",
                "WHERE sch_name != \"\" ",
                "GROUP BY sch_name",
            "</script>"})
    List<Map<String, Object>> listSchedulingCheck(@Param("param") SchedulingCheckSql param);
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class SchedulingCheckSql {

    @ApiModelProperty("日期")
    private List<String> classDates;
}

4.2 ServiceImpl

    @Override
    public List<Map<String, Object>> listSchedulingCheck(@Param("param") SchedulingCheckSql param) {
        return baseMapper.listSchedulingCheck(param);
    }

4.3 Service

    List<Map<String, Object>> listSchedulingCheck(@Param("param") SchedulingCheckSql param);

5、Controller调用后,返回的数据效果是这样子的
 

{
	"data": [
		{
			"2020-04-01": 0,
			"2020-04-03": 1,
			"2020-04-02": 0,
			"sch_name": "A班",
			"2020-04-05": 0,
			"2020-04-04": 1
		},
		{
			"2020-04-01": 0,
			"2020-04-03": 0,
			"2020-04-02": 0,
			"sch_name": "B班",
			"2020-04-05": 1,
			"2020-04-04": 0
		},
		{
			"2020-04-01": 1,
			"2020-04-03": 1,
			"2020-04-02": 0,
			"sch_name": "N班",
			"2020-04-05": 1,
			"2020-04-04": 0
		},
		{
			"2020-04-01": 0,
			"2020-04-03": 0,
			"2020-04-02": 2,
			"sch_name": "P班",
			"2020-04-05": 0,
			"2020-04-04": 1
		},
		{
			"2020-04-01": 1,
			"2020-04-03": 0,
			"2020-04-02": 0,
			"sch_name": "休息",
			"2020-04-05": 0,
			"2020-04-04": 0
		},
		{
			"2020-04-01": 0,
			"2020-04-03": 0,
			"2020-04-02": 0,
			"sch_name": "测试班次1",
			"2020-04-05": 0,
			"2020-04-04": 0
		},
		{
			"2020-04-01": 0,
			"2020-04-03": 0,
			"2020-04-02": 0,
			"sch_name": "测试班次2",
			"2020-04-05": 0,
			"2020-04-04": 0
		},
		{
			"2020-04-01": 0,
			"2020-04-03": 0,
			"2020-04-02": 0,
			"sch_name": "行政",
			"2020-04-05": 0,
			"2020-04-04": 0
		}
	]
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值