更新 knowledge.md

This commit is contained in:
oyo
2025-10-20 19:36:55 +08:00
parent 19efc38e5a
commit 50898d781e

View File

@@ -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` 校验。 处理先读后更新场景时为避免并发导致数据脏写应充分利用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知识库> </TOCO知识库>