From a3947239ad1da9eff351723724ea9f83b6a4319b Mon Sep 17 00:00:00 2001 From: oyo Date: Wed, 22 Oct 2025 19:15:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20knowledge.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- knowledge.md | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/knowledge.md b/knowledge.md index b2b32a8..be240f4 100644 --- a/knowledge.md +++ b/knowledge.md @@ -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对象