更新 knowledge.md

This commit is contained in:
oyo
2025-10-22 19:15:24 +08:00
parent f1ec30a7dd
commit a3947239ad

View File

@@ -1486,16 +1486,21 @@ class CreateUserBto { //对应实体user
#### **2.16 自定义查询**
- 读方案无法满足需求时,使用自定义查询。读方案能力边界示例:
- ✅ 可用读方案:
- 时间范围查询start_time >= #startTime AND end_time <= #endTime
- 状态过滤status != 'CANCELLED'
- exists子查询EXISTS(SELECT 1 FROM other_table WHERE ...)
- count查询SELECT COUNT(*) WHERE ...; SELECT COUNT(*) > 0 WHERE ...
- 一层或多层left join`SELECT * FROM meeting m LEFT JOIN meeting_agenda ma ON m.id = ma.meeting_id`
- 时间范围查询:`start_time >= #startTime AND end_time <= #endTime`
- 时间重叠查询:`(start_time <= #endTime AND end_time > #startTime)`
- 状态过滤:`status != 'CANCELLED' AND type in ['MEETING', 'CONFERENCE']`
- 组合条件:`(A AND B) OR (C AND D)`
- exists子查询`EXISTS(SELECT 1 FROM other_table WHERE ...)`
- 简单计数:`SELECT COUNT(*) WHERE ...`或`SELECT COUNT(*) > 0 WHERE ...`
- 一层或多层inner join和left join
- ❌ 必须自定义查询:
- GROUP BY聚合SELECT room_id, COUNT(*) FROM meeting GROUP BY room_id
- 复杂函数SELECT DATE_FORMAT(start_time, '%Y-%m') FROM meeting
- GROUP BY聚合
- 数据库内置函数:`SELECT DATE_FORMAT(start_time, '%Y-%m') FROM meeting`
- 聚合函数:`SELECT AVG(duration), SUM(participant_count) FROM meeting`
- 窗口函数:`SELECT *, ROW_NUMBER() OVER(PARTITION BY room_id ORDER BY start_time) FROM meeting`
- right join和outer join
- 自定义查询使用读方案能力边界之外的sql实现业务功能
- 自定义查询无法被TOCO管理过度使用自定义查询会导致后续代码的维护困难所以在使用自定义查询之前必须仔细分析是否可以使用读方案并尽量使用读方案实现
- 自定义查询无法被TOCO管理过度使用自定义查询会导致后续代码的维护困难所以在使用自定义查询之前必须仔细分析是否可以使用一个读方案或多个读方案串联实现,并尽量使用读方案
- 数据访问层使用MyBatis、MyBatisPlus实现
- 自定义查询时框架不自动生成代码(需要手动编写全部代码)
- 各层代码位置严格遵守**3.2 项目结构与导航**必须有mapper层、service层、DO对象、DTO对象API返回数据必须有VO对象