diff --git a/knowledge.md b/knowledge.md index dc2a534..170b4c5 100644 --- a/knowledge.md +++ b/knowledge.md @@ -1694,5 +1694,10 @@ 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类型的字段,专用于日期 == 的查询 + -----------------------------------------------------------------------------