需求:
根据选择查询时间区间,查询各个设备例如从 2021-07-01 至 2021-10-01 的租赁总应收,并以年-月分组
如以下sql:
SELECT date_format(o.rentStartDate,'%Y-%m') as 'key',sum(o.money) as 'value'
FROM rentOrder o
WHERE o.rentStartDate BETWEEN '2021-07-01' AND '2021-10-01'
GROUP BY date_format(o.rentStartDate,'%Y-%m');
查询结果如下:
需将返回的数据中以租赁开始时间为key,以总金额为value封装为一个Map
实现:
Mapper中接口:
List<HashMap<String, String>> getRentAmountMonthDetail(String startTime, String endTime);
Mapper.xml中:
<select id="getRentAmountMonthDetail" resultType="java.util.HashMap">
SELECT date_format(o.rentStartDate,'%Y-%m') as 'key',sum(o.money) as 'value'
FROM rentOrder o
WHERE o.rentStartDate BETWEEN #{startTime} AND #{endTime}
GROUP BY date_format(o.rentStartDate,'%Y-%m')
</select>
ServiceImpl中:
public Map<String, String> getRentAmountDetail(String startTime, String endTime) {
Map<String, String> map = new HashMap<String, String>();
List<HashMap<String, String>> list = mapper.getRentAmountMonthDetail(startTime, endTime);
if(Assert.notEmpty(list)) {
for(HashMap<String, String> map1 : list) {
String key = "";
String value = "";
for(Map.Entry<String, String> entry : map1.entrySet()) {
if("key".equals(entry.getKey())) {
key = String.valueOf(entry.getValue());
}else if("value".equals(entry.getKey())) {
value = String.valueOf(entry.getValue());
}
map.put(key, value);
}
}
}
return map;
}