苍穹外卖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 最常用
相关推荐
LinXunFeng1 天前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
闪闪发亮的小星星5 天前
高斯光以及高斯光公式解释
笔记
cqbzcsq5 天前
CellFlow虚拟细胞论文阅读
论文阅读·人工智能·笔记·学习·生物信息
阿米亚波5 天前
【Windows】QEMU 启动 openEuler aarch64/arm64 架构系统 + 离线软件源
linux·windows·经验分享·笔记·架构·arm
自传.5 天前
尚硅谷 Vibe Coding|第三章(1) Claude Code深度使用与进阶技巧 学习笔记
笔记·学习·尚硅谷·vibecoding
.千余5 天前
【C++】模板进阶全解:非类型参数|全特化|偏特化|分离编译完全指南
开发语言·c++·笔记·学习·其他
自传.5 天前
尚硅谷 Vibe Coding|第二章 AI编程工具生态 学习笔记
笔记·学习·ai编程·尚硅谷·vibe coding
秋波。未央5 天前
Java Agent 开发 · Day 1 学习笔记(含作业完整标准答案)
java·笔记·学习
中屹指纹浏览器6 天前
2026指纹浏览器字体指纹、字体渲染偏差检测与全维度虚拟字体池搭建方案
经验分享·笔记