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
    评论
MyBatis是一种持久层框架,它提供了一种将数据库操作与Java代码解耦的方式。总配置文件(configuration file)是MyBatis的核心配置文件,它包含了整个框架的全局配置信息。下面是对MyBatis总配置的详细解释: 1. 数据源配置(dataSource):指定数据库连接信息,包括数据库驱动、URL、用户名和密码等。 2. 类型别名配置(typeAliases):为Java对象设置别名,简化在映射文件中的类型引用。 3. 插件配置(plugins):用于扩展或修改MyBatis的核心功能,例如增加拦截器来实现自定义的逻辑。 4. 对象工厂配置(objectFactory):用于创建结果对象的实例,默认情况下使用默认的对象工厂。 5. 反射工厂配置(objectWrapperFactory):用于创建对象属性的包装器,默认情况下使用默认的反射工厂。 6. 数据库厂商标识配置(databaseIdProvider):根据不同的数据库厂商提供不同的SQL语句,以达到最佳性能。 7. 缓存配置(caches):配置缓存实现方式和策略,包括一级缓存和二级缓存。 8. 全局配置属性(properties):用于设置全局级别的配置属性,可以在映射文件中引用。 9. 环境配置(environments):指定MyBatis的运环境,包括事务管理器和数据源等。 10. 映射器配置(mappers):指定映射器(Mapper)接口或映射文件的位置,用于定义SQL语句和映射规则。 以上是MyBatis总配置文件的主要内容,通过对这些配置进合理的设置,可以实现对数据库的访问和操作。请注意,这只是总配置文件的概览,具体的配置细节和使用方法可以参考MyBatis官方文档或相关教程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值