Dapper怎么实现分页查询 Dapper SQL分页查询最佳实践

admin 百科 6
Dapper 本身不内置分页功能,需结合 SQL 分页语法(如 OFFSET-FETCH、LIMIT-OFFSET 或 ROW_NUMBER())实现;推荐 SQL Server 用 OFFSET-FETCH(需 ORDER BY + 索引),MySQL/PostgreSQL 用 LIMIT-OFFSET;查总数宜用 CTE 避免全表 COUNT(*);须防 SQL 注入、大偏移性能骤降、无序分页结果不可靠等陷阱。

Dapper怎么实现分页查询 Dapper SQL分页查询最佳实践-第1张图片-佛山资讯网

Dapper 本身不内置分页功能,但结合 SQL 的分页语法(如 OFFSET-FETCHLIMIT-OFFSETROW_NUMBER()),可以高效、安全地实现分页查询。关键在于写对 SQL、传对参数、避免全表扫描和性能陷阱。

用 OFFSET-FETCH(SQL Server 2012+ 推荐)

这是 SQL Server 最简洁、语义最清晰的分页方式,支持 ORDER BY 必选,天然防止歧义排序。

示例(获取第 3 页,每页 20 条):

SELECT Id, Name, Email 
FROM Users 
WHERE Status = @status 
ORDER BY Id 
OFFSET @skip ROWS 
FETCH NEXT @take ROWS ONLY

登录后复制

Dapper 调用:

var users = connection.Query<User>(@sql, new { status = "Active", skip = 40, take = 20 });

登录后复制

注意:@skip = (page - 1) * pageSize,务必确保 ORDER BY 字段有索引(如 Id),否则性能会断崖式下降。

兼容 MySQL / PostgreSQL:用 LIMIT 和 OFFSET

MySQL 和 PostgreSQL 原生支持 LIMIT offset, sizeLIMIT size OFFSET offset,写法更直观。

PostgreSQL 示例:

标签: mysql 大数据 app ai

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~