第一章:SqlSugar 简介与快速入门
目录
1. 什么是SqlSugar
1.1 SqlSugar简介
SqlSugar是一个功能强大、易用且高性能的 .NET ORM(对象关系映射)框架,由中国开发者创建并维护,专为简化.NET平台的数据库访问而设计。SqlSugar的核心理念是”让数据访问更简单、更高效、更优雅”,通过丰富的API和强大的功能,帮助开发者快速构建高质量的数据访问层。
SqlSugar采用 Apache-2.0 开源许可证发布,开发者可以免费用于商业项目。框架托管在GitHub和Gitee平台上:
- GitHub地址:https://github.com/DotNetNext/SqlSugar
- 官方文档:https://www.donet5.com/Home/Doc
- Gitee镜像:https://gitee.com/dotnetchina/SqlSugar
1.2 SqlSugar的命名含义
SqlSugar(SQL糖)这个名称富有深意:
- SQL:代表结构化查询语言,是数据库操作的基础
- Sugar:意为”语法糖”,即通过优雅简洁的API让SQL操作更甜蜜、更易用
正如其名,SqlSugar就是要为.NET开发者提供最甜蜜的数据访问体验。
1.3 核心定位
SqlSugar的核心定位可以概括为:
| 定位 | 说明 |
|---|---|
| 轻量级ORM | 不是重型框架,核心库体积小,性能优异 |
| 全功能框架 | 提供CRUD、事务、分页、多表联查等完整功能 |
| 多数据库支持 | 支持MySQL、SQL Server、PostgreSQL、Oracle、SQLite等数十种数据库 |
| 开发加速器 | 减少重复代码,大幅提升开发效率 |
| 企业级方案 | 支持分表分库、多租户、分布式事务等企业特性 |
2. SqlSugar的发展历程
2.1 版本演进时间线
SqlSugar自诞生以来,经历了多个重要的版本迭代:
| 版本 | 发布时间 | 重要特性 |
|---|---|---|
| 1.x | 2015年 | 项目初期,基础CRUD功能 |
| 2.x | 2016年 | 增加多数据库支持 |
| 3.x | 2017年 | 引入CodeFirst和DbFirst |
| 4.x | 2018-2019年 | 性能大幅优化,增加分表功能 |
| 5.x | 2020-至今 | 支持.NET Core/.NET 5+,增加多租户、分布式事务等企业特性 |
2.2 里程碑事件
- 2015年:SqlSugar项目启动,在CodePlex平台开源
- 2016年:迁移到GitHub,开始支持多数据库
- 2017年:社区用户突破1万+
- 2018年:性能优化,达到并超越Dapper性能水平
- 2019年:引入分表分库功能,支持大数据量场景
- 2020年:全面支持.NET Core 3.1和.NET 5
- 2021-2023年:持续优化,支持.NET 6/7/8,增加更多数据库支持
- 2024年至今:支持.NET 9,持续优化和完善
2.3 社区发展
SqlSugar拥有中国最活跃的.NET ORM社区之一:
- GitHub Star数:15,000+
- Gitee Star数:5,000+
- NuGet下载量:数百万次
- 开发者社区:活跃的QQ群、微信群、论坛
3. 核心特性与优势
3.1 零SQL开发
SqlSugar支持完全零SQL开发,通过Lambda表达式和链式API实现所有数据库操作:
// 查询示例 - 无需编写SQL
var users = db.Queryable<User>()
.Where(u => u.Age > 18 && u.Status == 1)
.OrderBy(u => u.CreateTime, OrderByType.Desc)
.ToList();
3.2 多数据库支持
SqlSugar支持数十种主流和国产数据库,切换数据库只需修改DbType配置:
主流数据库:
- SQL Server (2005-2022)
- MySQL (5.x/8.x)
- PostgreSQL
- Oracle
- SQLite
国产数据库:
- 达梦(DM)
- 人大金仓(KingbaseES)
- 神通(Oscar)
- 南大通用(GBase)
- 瀚高(HighGo)
大数据/时序数据库:
- ClickHouse
- TDengine
- MongoDB
云数据库:
- OceanBase
- PolarDB
- TiDB
3.3 高性能设计
SqlSugar在性能方面做了大量优化:
| 性能特性 | 说明 |
|---|---|
| 表达式树编译 | 使用表达式树动态编译,避免反射性能损耗 |
| 对象池技术 | 复用对象,减少GC压力 |
| 批量操作 | 支持高效的批量插入、更新、删除 |
| 异步支持 | 全面支持async/await异步编程 |
| 一级缓存 | 智能缓存,减少数据库访问 |
性能对比(相对值):
- 查询性能:与Dapper相当,优于EF Core 30-50%
- 批量插入:10万条数据仅需2-3秒
- 复杂查询:比EF Core快50%+
3.4 CodeFirst与DbFirst双支持
CodeFirst(代码优先):
// 定义实体类
public class User
{
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
// 自动创建表
db.CodeFirst.InitTables<User>();
DbFirst(数据库优先):
// 根据现有数据库生成实体类
db.DbFirst.CreateClassFile("c:\\Demo\\Models");
3.5 分表分库支持
SqlSugar提供原生的分表分库支持,适用于大数据量场景:
// 按年份分表
[SplitTable(SplitType.Year)]
[SugarTable("Order_{year}")]
public class Order
{
public int Id { get; set; }
public DateTime CreateTime { get; set; }
public decimal Amount { get; set; }
}
// 自动路由到正确的分表
var orders = db.Queryable<Order>()
.Where(o => o.CreateTime >= DateTime.Parse("2023-01-01"))
.ToList();
3.6 多租户架构
内置多租户支持,轻松实现SaaS应用:
// 配置租户数据库
var tenant = new SqlSugarScope(new ConnectionConfig[]
{
new ConnectionConfig{ ConfigId="tenant1", DbType=DbType.MySql, ConnectionString="..." },
new ConnectionConfig{ ConfigId="tenant2", DbType=DbType.MySql, ConnectionString="..." }
});
// 根据租户ID切换数据库
var db = tenant.GetConnection("tenant1");
3.7 强大的AOP功能
SqlSugar提供丰富的AOP拦截点,方便实现日志、审计、性能监控等功能:
db.Aop.OnLogExecuting = (sql, pars) =>
{
Console.WriteLine($"SQL: {sql}");
Console.WriteLine($"参数: {db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value))}");
};
db.Aop.OnError = (exp) =>
{
Console.WriteLine($"错误: {exp.Message}");
};
4. 适用场景分析
4.1 最适合的场景
SqlSugar特别适合以下开发场景:
| 场景 | 原因 |
|---|---|
| 快速原型开发 | API简洁,学习成本低,可快速构建原型 |
| 中小型项目 | 功能全面,无需引入多个组件 |
| 多数据库项目 | 切换数据库极其方便,一套代码多数据库运行 |
| 大数据量项目 | 支持分表分库,性能优异 |
| SaaS多租户系统 | 内置多租户支持 |
| 微服务架构 | 轻量级,适合在微服务中使用 |
| 遗留系统重构 | 可以与现有代码共存,逐步替换 |
4.2 不太适合的场景
以下场景可能需要考虑其他方案:
- 复杂的领域驱动设计(DDD):如果需要复杂的聚合根、值对象等DDD概念,EF Core可能更合适
- 需要强类型的数据库迁移:EF Core的Migration功能更强大
- 需要复杂的继承映射:EF Core在继承映射方面支持更好
4.3 实际应用案例
SqlSugar已被众多企业和项目采用:
- 电商平台:某大型电商平台使用SqlSugar处理千万级订单数据
- 物联网系统:某物联网平台使用SqlSugar存储海量传感器数据
- 政务系统:多个政府项目使用SqlSugar,支持国产数据库
- 金融系统:某金融公司使用SqlSugar的分布式事务功能
- SaaS平台:多个SaaS产品使用SqlSugar的多租户功能
5. 与其他ORM框架对比
5.1 SqlSugar vs EF Core
| 对比项 | SqlSugar | EF Core |
|---|---|---|
| 学习曲线 | 平缓,API简单直观 | 较陡,概念较多 |
| 性能 | 优秀,接近Dapper | 良好,但较SqlSugar慢 |
| 数据库支持 | 30+种,包括国产数据库 | 主流数据库 |
| 分表分库 | 原生支持 | 需第三方库 |
| 代码优先 | 支持,简单直观 | 支持,功能强大 |
| 迁移功能 | 基础支持 | 强大的Migration |
| 多租户 | 原生支持 | 需自行实现 |
| DDD支持 | 基础支持 | 更完善 |
选择建议:
- 追求性能、需要多数据库支持 → SqlSugar
- 需要复杂的领域模型、强类型迁移 → EF Core
5.2 SqlSugar vs Dapper
| 对比项 | SqlSugar | Dapper |
|---|---|---|
| 学习曲线 | 中等 | 平缓 |
| 性能 | 与Dapper相当 | 极佳 |
| 功能完整性 | 完整的ORM功能 | 轻量级Micro-ORM |
| 查询构建 | 链式Lambda表达式 | 需手写SQL |
| 多表联查 | 支持,无需写SQL | 需手写SQL |
| 代码量 | 少 | 较多(需写SQL) |
| 类型安全 | 完全类型安全 | 基本类型安全 |
选择建议:
- 需要完整ORM功能、追求开发效率 → SqlSugar
- 极致追求性能、喜欢写SQL → Dapper
5.3 SqlSugar vs FreeSql
| 对比项 | SqlSugar | FreeSql |
|---|---|---|
| 诞生时间 | 2015年 | 2019年 |
| 成熟度 | 非常成熟 | 较新但发展快 |
| 文档质量 | 完善 | 完善 |
| 社区活跃度 | 非常活跃 | 活跃 |
| 功能特性 | 非常丰富 | 丰富 |
| API风格 | 简洁直观 | 功能丰富 |
两者都是优秀的.NET ORM框架,选择主要看个人偏好和项目需求。
6. 第一个SqlSugar程序
6.1 安装SqlSugar
通过NuGet安装SqlSugar:
# .NET CLI
dotnet add package SqlSugar
# Package Manager Console
Install-Package SqlSugar
根据使用的数据库,可能还需要安装对应的数据库驱动:
# MySQL
dotnet add package MySqlConnector
# SQL Server - 通常.NET已包含
# PostgreSQL
dotnet add package Npgsql
# Oracle
dotnet add package Oracle.ManagedDataAccess.Core
# SQLite
dotnet add package System.Data.SQLite.Core
6.2 创建第一个控制台程序
创建一个简单的控制台应用程序:
using SqlSugar;
using System;
namespace SqlSugarDemo
{
class Program
{
static void Main(string[] args)
{
// 1. 创建数据库连接
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = "server=localhost;database=testdb;uid=root;pwd=123456;",
DbType = DbType.MySql,
IsAutoCloseConnection = true,
InitKeyType = InitKeyType.Attribute
});
// 2. 定义实体类
// 见下方User类定义
// 3. 创建表(CodeFirst)
db.CodeFirst.InitTables(typeof(User));
// 4. 插入数据
db.Insertable(new User
{
Name = "张三",
Age = 25,
Email = "zhangsan@example.com"
}).ExecuteCommand();
// 5. 查询数据
var users = db.Queryable<User>().ToList();
// 6. 输出结果
foreach (var user in users)
{
Console.WriteLine($"ID: {user.Id}, Name: {user.Name}, Age: {user.Age}");
}
}
}
// 实体类定义
public class User
{
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
[SugarColumn(Length = 50)]
public string Name { get; set; }
public int Age { get; set; }
[SugarColumn(Length = 100)]
public string Email { get; set; }
}
}
6.3 代码说明
1. 创建数据库连接
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = "连接字符串",
DbType = DbType.MySql, // 数据库类型
IsAutoCloseConnection = true, // 自动关闭连接
InitKeyType = InitKeyType.Attribute // 使用特性初始化
});
2. 定义实体类 使用特性标注实体类和属性:
[SugarColumn(IsPrimaryKey = true)]:标识主键[SugarColumn(IsIdentity = true)]:标识自增[SugarColumn(Length = 50)]:指定字段长度
3. 创建表
db.CodeFirst.InitTables(typeof(User));
4. 基本操作
- 插入:
db.Insertable(entity).ExecuteCommand() - 查询:
db.Queryable<T>().ToList() - 更新:
db.Updateable(entity).ExecuteCommand() - 删除:
db.Deleteable<T>().Where(...).ExecuteCommand()
6.4 运行程序
编译并运行程序:
dotnet run
输出结果:
ID: 1, Name: 张三, Age: 25
7. 社区与生态资源
7.1 官方资源
| 资源 | 链接 | 说明 |
|---|---|---|
| 官方网站 | https://www.donet5.com | 完整文档和教程 |
| GitHub仓库 | https://github.com/DotNetNext/SqlSugar | 源代码、Issue、PR |
| Gitee镜像 | https://gitee.com/dotnetchina/SqlSugar | 国内访问更快 |
| NuGet包 | https://www.nuget.org/packages/SqlSugar | 下载安装包 |
7.2 学习资源
官方文档:
- 入门教程:https://www.donet5.com/Home/Doc
- API参考:详细的API文档
- 视频教程:B站有多个视频教程
- 示例代码:GitHub仓库中的Examples目录
社区文章:
- CSDN、博客园有大量实战文章
- SegmentFault、掘金也有很多教程
- 公众号文章和技术博客
视频教程:
- B站搜索”SqlSugar教程”
- 作者录制的官方教程
- 社区开发者分享的实战视频
7.3 社区支持
交流群组:
- QQ群:多个技术交流群
- 微信群:开发者交流群
- GitHub Discussions:英文交流
- Gitee Issues:中文问题讨论
技术支持:
- GitHub Issues:Bug报告和功能请求
- Gitee Issues:中文问题反馈
- Stack Overflow:标签sqlsugar
- 官方论坛:开发者论坛
7.4 贡献指南
如果你想为SqlSugar做贡献:
- 报告Bug:在GitHub/Gitee提Issue
- 提交PR:Fork仓库,修改后提交Pull Request
- 完善文档:帮助改进文档
- 分享经验:写文章、录视频分享使用经验
7.5 商业支持
SqlSugar提供商业技术支持服务:
- 技术咨询
- 定制开发
- 培训服务
- VIP技术支持
本章小结
本章我们全面了解了SqlSugar框架:
- SqlSugar是什么:一个高性能、易用的.NET ORM框架
- 发展历程:从2015年至今,持续发展和完善
- 核心特性:零SQL开发、多数据库支持、高性能、分表分库等
- 适用场景:适合各种规模的项目,尤其是多数据库和大数据量场景
- 对比分析:相比EF Core、Dapper各有优势
- 快速上手:通过第一个程序了解基本用法
- 社区资源:丰富的文档、教程和社区支持
在下一章,我们将详细学习如何在实际项目中配置和集成SqlSugar。
延伸阅读
- SqlSugar官方文档:https://www.donet5.com/Home/Doc
- GitHub仓库:https://github.com/DotNetNext/SqlSugar
- .NET ORM框架对比:https://www.nuget.org/packages?q=orm
- 表达式树基础:https://docs.microsoft.com/zh-cn/dotnet/csharp/expression-trees
练习题
- 在本地创建一个控制台应用程序,安装SqlSugar并连接到MySQL/SQL Server数据库
- 定义一个Product实体类,包含Id、Name、Price、Stock等属性
- 使用CodeFirst创建Product表
- 实现基本的CRUD操作:插入3个产品、查询所有产品、更新一个产品价格、删除一个产品
- 思考:SqlSugar与你之前使用的ORM框架有什么不同?
下一章:第二章:环境配置与项目集成