条件、排序、分页和统计
这一节把列表接口常用查询整理到一起。
示例模型:
一、基础条件
多个条件:
二、模糊查询
注意:LIKE '%关键词%' 在数据量大时可能比较慢。经常搜索标题时,要考虑索引或搜索方案。
三、排序
按创建时间倒序:
更稳定的排序:
当创建时间相同时,再用 id 保证顺序稳定。
四、分页
分页参数建议做保护:
避免用户传一个很大的 pageSize 把数据库拖慢。
五、统计总数
分页接口通常需要总数:
列表和总数一般分开查:
注意:链式调用会复用条件,复杂场景下可以重新构造查询,避免前一次调用影响后一次。
六、选择字段
列表页不一定需要正文:
字段少时,响应更轻,查询也更清楚。
七、扫描到自定义结构体
列表接口可以定义专门的返回结构:
查询:
Scan 适合把查询结果映射到非模型结构体。
八、聚合查询
统计每个状态的文章数量:
对应 SQL 大致是:
九、原生 SQL
复杂查询可以直接写 SQL:
GORM 不要求所有查询都必须用链式 API。复杂 SQL 直接写,反而更清晰。

