苍穹外卖Day10笔记

苍穹外卖笔记 Day11

0. 前言

  • 日期:2026.04.24
  • 核心内容:Apache ECharts、时间格式化、LocalDateTime 常用API、XML 转义字符、Stream 流常用方法
  • 难度:基础
  • 面试/开发重点:时间处理、Stream 流式编程、ECharts 数据封装、XML 特殊字符转义

一、Apache ECharts(苍穹外卖数据统计)

1. 基本介绍

  • Apache ECharts 是开源可视化图表库 ,用于前端展示数据统计图表
  • 苍穹外卖场景:营业额统计、订单统计、用户统计、销量排名
  • 后端只需要封装对应格式的数据(List、Map、VO),交给前端渲染

2. 苍穹外卖常用图表

  • 折线图:每日营业额、订单量趋势
  • 柱状图:菜品销量、套餐销量
  • 饼图:订单状态占比、品类销量占比

3. 后端开发要点

  • 按时间分组统计数据
  • 封装 name(x轴)和 value(y轴)数据
  • 返回给前端 VO 对象:nameListvalueList

二、@DateTimeFormat 时间格式化

1. 作用

  • 接收前端传入的日期字符串 ,自动封装为 LocalDate / LocalDateTime
  • 用于Controller 接口参数

2. 常用写法

java 复制代码
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate begin;

@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime begin;

3. 作用场景

  • 苍穹外卖:时间范围查询(今日、昨日、近7天、本月)
  • 前端传:2026-04-24
  • 后端自动封装为 LocalDate

三、LocalDateTime 常用 API(苍穹外卖高频)

1. begin.plusDays(1)

  • 作用:给日期加 1 天
  • 苍穹外卖用途:统计截止时间 end = begin + 1天
  • 示例:
java 复制代码
LocalDate begin = LocalDate.now();
LocalDate end = begin.plusDays(1);

2. LocalDateTime.of()

  • 作用:手动构建 LocalDateTime
  • 常用于拼接起始时间 00:00:00结束时间 23:59:59
  • 示例:
java 复制代码
LocalDateTime startTime = LocalDateTime.of(begin, LocalTime.MIN);
LocalDateTime endTime = LocalDateTime.of(end, LocalTime.MAX);

四、XML 转义字符(MyBatis 映射文件)

1. 为什么需要转义

  • MyBatis 的 XML 中 < > & " ' 有特殊意义
  • 直接写会报错,必须转义

2. 常用转义(苍穹外卖必背)

  • &gt;> 大于号
  • &lt;< 小于号
  • &amp; → &
  • &quot; → "
  • ' → '

3. 业务场景(时间范围查询)

xml 复制代码
where order_time >= #{begin}
and order_time &lt; #{end}

五、Stream 流常见常用方法(苍穹外卖高频)

1. filter 过滤

java 复制代码
list.stream()
    .filter(orders -> orders.getPayStatus() == 1)
    .collect(Collectors.toList());

2. map 转换/提取字段

java 复制代码
List<Long> ids = list.stream()
                     .map(Order::getId)
                     .collect(Collectors.toList());

3. sorted 排序

java 复制代码
.sorted(Comparator.comparing(Order::getOrderTime))

4. collect(Collectors.toList()) 转List

java 复制代码
.collect(Collectors.toList())

5. collect(Collectors.toMap()) 转Map

java 复制代码
.collect(Collectors.toMap(Order::getId, Order::getAmount))

6. sum 求和(数字类型)

java 复制代码
int sum = list.stream().mapToInt(Dish::getSales).sum();

7. groupingBy 分组统计

java 复制代码
Map<Integer, List<Order>> map = list.stream()
    .collect(Collectors.groupingBy(Order::getStatus));

8. forEach 遍历

java 复制代码
list.stream().forEach(System.out::println);

六、总结(Day11 核心)

  1. ECharts:负责数据可视化,后端封装统计数据
  2. @DateTimeFormat:接收前端日期,自动封装
  3. plusDays(1)、of():时间计算、构建起始/结束时间
  4. > <:XML 中大于、小于号必须转义
  5. Stream 流:filter、map、sum、groupingBy、sorted、collect 最常用
相关推荐
中屹指纹浏览器5 小时前
2026指纹浏览器行为指纹对抗技术详解:从算法识别到真人模拟全方案
经验分享·笔记
2301_809051146 小时前
Linux 数据库开发 学习笔记
笔记·学习·数据库开发
很楠爱上6 小时前
Node.js 模块化学习笔记
笔记·学习·node.js
mnasd6 小时前
RockyLinux 9.5 部署 Kubernetes1.35 集群
笔记
東隅已逝,桑榆非晚7 小时前
编译和链接
c语言·笔记
05候补工程师7 小时前
【考研高数核心突破】极限的本质、高频解题套路与海涅定理深度解析(附经典例题思维导图式拆解)
经验分享·笔记·考研·算法
智者知已应修善业7 小时前
【51单片机8个LED的花样12亮34熄56间隔78闪烁3秒3闪烁】2023-11-4
c++·经验分享·笔记·算法·51单片机
Upsy-Daisy7 小时前
IOTA 学习笔记(六):Move 语言入门
笔记·学习
searchforAI7 小时前
网盘视频转文字后,如何高效做笔记并长期归档?
人工智能·笔记·学习·ai·音视频·语音识别·网盘
土狗TuGou8 小时前
SQL内功笔记 · 第9篇:UPDATE FROM 进阶——告别逐行子查询,拥抱集合更新
java·数据库·笔记·sql·mysql