【实战指南】C# SqlSugar高效操作MySQL:从基础增删改查到高级应用 1. SqlSugar与MySQL开发环境搭建第一次接触SqlSugar时我被它的简洁API设计惊艳到了。作为一款国产ORM框架SqlSugar在性能和使用体验上完全不输Entity Framework。下面我带大家从零开始搭建开发环境。安装NuGet包是第一步。在Visual Studio中右键项目选择管理NuGet程序包搜索安装以下三个核心组件SqlSugarCoreORM核心MySql.DataMySQL官方驱动Newtonsoft.Json可选用于JSON处理连接MySQL数据库的代码比想象中简单很多var db new SqlSugarClient(new ConnectionConfig() { ConnectionString serverlocalhost;Databasetest;Uidroot;Pwd123456;, DbType DbType.MySql, IsAutoCloseConnection true, InitKeyType InitKeyType.Attribute });这里有几个实用技巧值得注意IsAutoCloseConnectiontrue能自动释放连接避免内存泄漏生产环境建议将连接字符串放在appsettings.json中开发阶段可以开启SQL日志方便调试db.Aop.OnLogExecuting (sql, pars) { Console.WriteLine(sql); };实体类映射是ORM的核心功能。SqlSugar通过[SugarColumn]特性实现灵活映射[SugarTable(user_info)] // 指定表名 public class User { [SugarColumn(IsPrimaryKey true, IsIdentity true)] public int Id { get; set; } [SugarColumn(Length 50, IsNullable false)] public string Name { get; set; } [SugarColumn(ColumnDataType varchar(100))] public string Email { get; set; } }特别提醒如果数据库表不存在SqlSugar可以自动建表// 自动创建不存在的表 db.CodeFirst.InitTables(typeof(User));2. 基础CRUD操作实战数据插入的多种姿势值得细说。最基本的单条插入var user new User { Name 张三, Email zhangsanexample.com }; var count db.Insertable(user).ExecuteCommand();但实际项目中我们更常用批量插入性能比循环单条插入高10倍以上var users new ListUser { new User{ Name李四, Emaillisiexample.com }, new User{ Name王五, Emailwangwuexample.com } }; db.Insertable(users).ExecuteCommand();查询操作的灵活性是ORM的核心竞争力。SqlSugar提供了链式API// 条件查询 var list db.QueryableUser() .Where(u u.Name.Contains(张)) .OrderBy(u u.Id, OrderByType.Desc) .ToList(); // 分页查询 var pageList db.QueryableUser() .Where(u u.Id 0) .ToPageList(1, 10, ref totalCount);遇到复杂查询时原生SQL有时更直观var list db.Ado.SqlQueryUser(SELECT * FROM user WHERE name LIKE name, new { name %张% });更新操作支持多种模式。我最常用的是条件更新db.UpdateableUser() .SetColumns(u u.Name 张三丰) .Where(u u.Id 1) .ExecuteCommand();删除操作的安全防护很重要一定要加条件限制// 危险清空整张表 // db.DeleteableUser().ExecuteCommand(); // 安全删除 db.DeleteableUser().Where(u u.Id 1).ExecuteCommand();3. 高级查询技巧多表联查在实际项目中必不可少。SqlSugar的联查语法相当优雅var query db.QueryableUser() .LeftJoinDepartment((u, d) u.DeptId d.Id) .Select((u, d) new { UserName u.Name, DeptName d.Name });动态条件构建是应对复杂查询场景的利器var exp Expressionable.CreateUser(); if (!string.IsNullOrEmpty(keyword)) exp exp.And(u u.Name.Contains(keyword)); if (minAge 0) exp exp.And(u u.Age minAge); var list db.QueryableUser().Where(exp.ToExpression()).ToList();聚合查询统计时特别有用var statistics db.QueryableOrder() .GroupBy(o o.ProductId) .Select(o new { ProductId o.ProductId, Total SqlFunc.AggregateSum(o.Amount), Count SqlFunc.AggregateCount(o.Id) }).ToList();JSON支持是现代数据库的必备功能。SqlSugar对MySQL的JSON类型有良好支持// 查询JSON字段 var users db.QueryableUser() .Where(u u.ExtraInfo.Contains(\vip\:true)) .ToList(); // 更新JSON字段 db.UpdateableUser() .SetColumns(u u.ExtraInfo[level] 2) .Where(u u.Id 1) .ExecuteCommand();4. 事务与批量操作事务处理是数据库操作的安全保障。SqlSugar提供了多种事务写法我最推荐这种try { db.Ado.BeginTran(); // 业务操作1 db.Insertable(user1).ExecuteCommand(); // 业务操作2 db.Updateable(user2).ExecuteCommand(); db.Ado.CommitTran(); } catch(Exception ex) { db.Ado.RollbackTran(); throw; }批量操作能极大提升性能。以批量插入为例对比几种方式的差异操作方式1000条耗时内存占用单条循环插入3200ms高普通批量插入450ms中BulkCopy批量插入120ms低SqlSugar的BulkCopy用法db.FastestUser().BulkCopy(users); // 超高速插入存储过程调用也很简单var parameters new SugarParameter[] { new SugarParameter(userId, 123), new SugarParameter(output, null, true) }; db.Ado.UseStoredProcedure().ExecuteCommand(sp_getUserInfo, parameters);5. 实战经验与性能优化连接池配置对性能影响很大。建议在连接字符串中加入这些参数Poolingtrue;MinimumPoolSize5;MaximumPoolSize100;ConnectionTimeout15索引优化方面SqlSugar支持自动创建索引[SugarIndex(idx_user_name, nameof(User.Name), OrderByType.Asc)] public class User { //... }读写分离配置只需要几行代码var db new SqlSugarClient(new ListConnectionConfig { new ConnectionConfig(){ ConfigIdwrite, ConnectionStringwriteConn, DbTypeDbType.MySql}, new ConnectionConfig(){ ConfigIdread, ConnectionStringreadConn, DbTypeDbType.MySql} }, db db.UsePolicyReadWritePolicy());缓存策略可以有效减轻数据库压力// 设置5分钟缓存 var user db.QueryableUser() .WithCache(60*5) .First(u u.Id 1);监控与诊断也很重要。我习惯在开发环境开启完整日志db.Aop.OnLogExecuting (sql, pars) { File.AppendAllText(sql.log, ${DateTime.Now}: {sql}\n); }; db.Aop.OnError (exp) { // 记录错误日志 };6. 复杂场景解决方案分库分表处理起来比较棘手。SqlSugar的解决方案很优雅// 按月分表 var tableName $order_{DateTime.Now:yyyyMM}; var orders db.QueryableOrder().AS(tableName).ToList(); // 按用户ID分库 var userId 12345; var configId userId % 3; // 分3个库 using (var db new SqlSugarClient(connList[configId])) { // 操作对应库 }软删除是常见需求可以通过全局过滤器实现// 配置软删除过滤器 db.QueryFilter.Add(new TableFilterItemUser(u u.IsDeleted false)); // 所有查询会自动加上 IsDeletedfalse 条件 var activeUsers db.QueryableUser().ToList();多租户系统的数据隔离方案// 自动添加租户ID条件 db.QueryFilter.Add(new TableFilterItemOrder(o o.TenantId currentTenantId)); // 也可以手动指定租户 db.QueryableOrder().Where(o o.TenantId 1).ToList();字段加密保护敏感数据public class User { [SugarColumn(IsEncrypt true)] public string Phone { get; set; } } // 查询时会自动解密 var user db.QueryableUser().First(u u.Id 1);7. 最佳实践与踩坑指南代码规范方面我有几点建议实体类单独放在Models文件夹数据库操作封装成Repository连接字符串等配置放在appsettings.json为每个表创建对应的实体类常见错误及解决方案连接泄露确保使用using或设置IsAutoCloseConnectiontrue长事务事务范围不要太大耗时操作不要放在事务中N1查询使用Mapper或Include实现关联查询并发冲突合理使用乐观锁性能调优checklist[ ] 启用连接池[ ] 合理使用索引[ ] 批量操作代替循环[ ] 适当使用缓存[ ] 避免SELECT *单元测试方案推荐[Test] public void Test_UserCRUD() { using (var db GetTestDb()) { var user new User { Name Test }; var id db.Insertable(user).ExecuteReturnIdentity(); var result db.QueryableUser().First(u u.Id id); Assert.AreEqual(Test, result.Name); } }8. 扩展应用场景报表查询的优化技巧// 使用临时表处理复杂统计 db.Ado.ExecuteCommand(CREATE TEMPORARY TABLE temp_stats AS SELECT...); // 然后基于临时表查询 var report db.Queryabletemp_stats().ToList();GIS空间数据支持// 查询5公里范围内的用户 var point POINT(116.404 39.915); var users db.QueryableUser() .Where(u SqlFunc.StDistance(u.Location, point) 5000) .ToList();全文检索集成方案// 使用MySQL全文索引 var result db.QueryableArticle() .Where(a SqlFunc.Match(a.Content, 搜索关键词)) .ToList();定时任务中的数据库操作// 使用Hangfire等框架时 public void ProcessData() { using (var db new SqlSugarClient(connectionString)) { // 批处理逻辑 } }9. 与EF Core的对比选择功能对比供参考特性SqlSugarEF Core多数据库支持✔️✔️性能⭐⭐⭐⭐⭐⭐⭐易用性⭐⭐⭐⭐⭐⭐⭐⭐迁移工具✔️✔️可视化工具❌✔️选型建议新项目推荐SqlSugarAPI更友好需要可视化设计器选EF Core高性能场景SqlSugar更有优势复杂查询EF Core的LINQ更强大混合使用的方案// 在Startup.cs中配置 services.AddDbContextAppDbContext(options options.UseMySql(Configuration.GetConnectionString(Default))); services.AddSingletonISqlSugarClient(provider new SqlSugarClient(new ConnectionConfig() { ConnectionString Configuration.GetConnectionString(Default), DbType DbType.MySql }));10. 最新特性与未来展望SqlSugar 5.x值得关注的新功能更强大的批量操作API改进的AOP拦截机制增强的多租户支持更好的分布式事务支持云原生适配方案支持Kubernetes的连接池管理集成Azure/AWS的托管数据库服务微服务场景下的分布式缓存AI集成可能性// 未来可能支持的AI特性 var result db.QueryableUser() .AIWhere(找到所有VIP用户) .ToList();性能路线图计划支持更快的BulkCopy优化多表Join性能减少内存占用增强异步支持