更新 knowledge.md

This commit is contained in:
oyo
2025-10-21 15:26:08 +08:00
parent 2794f1e10e
commit 854275fbda

View File

@@ -694,7 +694,6 @@ meeting_with_room_and_agenda_wo示例
例如实体t(id,name)实体t1(id,name,t_id)`select * from t where exists (select * from t1 where t.id=t1.id and t.name like ?)`非法,`select * from t left join t1 on t.id=t1.id and t1.name like ?`合法
- 需求超出读方案能力时,必须使用自定义查询
- **特别注意** 根据主键获取单个或批量DTO/VO且不需过滤列表字段数据的需求必须使用DTO自动生成的预定义方法禁止使用读方案
- 针对Date类型字段的查询需要参照 **[TOCO 最佳实践]** 中的 **[4.3 Date类型重点关注]**,必须仔细分析需求,看是否需要使用时间范围查询,而非时间点的 == 查询
- **关键配置:** 名称(小写字母+下划线不以read_plan结尾全局唯一)、返回结构(DTO/VO一个读方案只能返回一种类型)、查询条件自然语言描述、是否生成计数方法、排序字段、过滤字段及过滤条件
- **与RPC、代码的关系:** 返回DTO的读方案自动生成RPC方法参数为QTO返回值为DTO列表返回VO的读方案自动生成Java方法参数为QTO返回值为VO列表方法内部逻辑由TOCO完全实现
- **生成的读方案RPC使用:** 读方案RPC属于对应模块其他模块需先订阅该RPC用adapter调用当前模块直接调用对应Service
@@ -1695,10 +1694,5 @@ TOCO严格遵照分层规则必须严格遵守否则会产生严重后果
处理先读后更新场景时为避免并发导致数据脏写应充分利用BoService校验功能。例如账户扣钱场景避免并发扣除导致余额不足传统raw sql用 `update account set balance = balance - amount where user_id = xxx and balance > amount` 的where条件保护在TOCO中应该1、写方案中使用incr字段。2、在boService中添加保护代码 `if(userBo.getBalance() >= 0)` 或通过userBo业务不变性聚合校验添加 `balance>=0` 校验。
#### 4.3 Date类型重点关注
TOCO中的Date类型对应一个具体时间点数据格式为 `yyyy-MM-dd HH:mm:ss`在针对Date类型进行查询时必须先判断是否应该使用**时间范围查询**,谨慎使用 == 操作符很可能导致无法查询到数据以下为几种常见case
- Entity中有Date类型字段actionTime如果需要查询当天的操作记录则读方案中的查询条件应该是针对actionTime的范围查询查询actionTime在当天0点到当天24点之间的所有数据
- 如果确定要使用日期作为存储,如 `yyyy-MM-dd`格式则可以在数据库设计时设计一个String类型的字段专用于日期 == 的查询
-----------------------------------------------------------------------------
</TOCO知识库>