SqlSugar MySQL 完整全套教程
SqlSugar MySQL 完整全套教程(可直接复制到项目)
一、NuGet 安装
- 核心ORM包
Install-Package SqlSugar
- MySQL驱动(必须装)
Install-Package MySqlConnector
二、MySQL 专用连接串 + 全局工具类 SqlSugarHelper
1. 工具类(MySQL版本,直接替换DbType和连接字符串)
using SqlSugar;
using System;
namespace Demo
{
public static class SqlSugarHelper
{
private static readonly SqlSugarScope _db;
static SqlSugarHelper()
{
// ===================== MySQL 连接字符串 =====================
// 参数说明:
// Server=IP;Port=端口;Database=库名;Uid=账号;Pwd=密码
// AllowLoadLocalInfile=true 批量插入文件用;SslMode=None 本地开发关闭SSL
string connStr = "Server=127.0.0.1;Port=3306;Database=test_db;Uid=root;Pwd=123456;SslMode=None;AllowLoadLocalInfile=true";
var config = new ConnectionConfig()
{
ConnectionString = connStr,
// 关键:MySQL固定填 DbType.MySql
DbType = DbType.MySql,
IsAutoCloseConnection = true,
MoreSettings = new ConnMoreSettings
{
IsWithNoLockQuery = false, // MySQL无nolock,关闭
PgSqlIsAutoToLower = false
}
};
_db = new SqlSugarScope(config, db =>
{
// SQL日志输出,调试打印完整执行语句
db.Aop.OnLogExecuting = (sql, pars) =>
{
Console.WriteLine($"【MySQL执行SQL】{sql}");
};
// 异常拦截
db.Aop.OnError = ex =>
{
Console.WriteLine($"SQL异常:{ex.Message}");
};
});
}
public static ISqlSugarClient Db => _db;
}
}
三、MySQL 实体示例(适配MySQL字段规范)
MySQL字段默认小写,实体可自由映射,支持自增主键
using SqlSugar;
using System;
namespace Demo.Entity
{
/// <summary>
/// 用户表 user_info(MySQL下划线命名)
/// </summary>
[SugarTable("user_info")]
public class UserInfo
{
/// <summary>
/// 主键自增
/// </summary>
[SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnName = "id")]
public long Id { get; set; }
[SugarColumn(ColumnName = "user_name", Length = 50, IsNullable = false)]
public string UserName { get; set; }
[SugarColumn(ColumnName = "age")]
public int Age { get; set; }
[SugarColumn(ColumnName = "create_time")]
public DateTime CreateTime { get; set; }
}
/// <summary>
/// 订单表 order_info
/// </summary>
[SugarTable("order_info")]
public class OrderInfo
{
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public long Id { get; set; }
public long UserId { get; set; }
public string OrderNo { get; set; }
public decimal Amount { get; set; }
}
}
四、MySQL CRUD 完整示例(LINQ语法)
using Demo;
using Demo.Entity;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Demo.Test
{
public class MySqlSugarDemo
{
private readonly ISqlSugarClient _db = SqlSugarHelper.Db;
public void RunAll()
{
AddSingle();
AddBatchData();
QueryData();
PageQuery();
UpdateDemo();
DeleteDemo();
JoinTableQuery();
ExecuteNativeSql();
TransactionTest();
}
#region 新增
/// 单条新增,返回自增主键
void AddSingle()
{
var user = new UserInfo
{
UserName = "张三",
Age = 22,
CreateTime = DateTime.Now
};
long newId = _db.Insertable(user).ExecuteReturnBigIdentity();
Console.WriteLine($"新增用户ID:{newId}");
}
/// 批量插入(MySQL批量性能优秀)
void AddBatchData()
{
var list = new List<UserInfo>()
{
new UserInfo{UserName="李四",Age=25,CreateTime=DateTime.Now},
new UserInfo{UserName="王五",Age=28,CreateTime=DateTime.Now}
};
// 批量插入,自动拼接MySQL多条INSERT
_db.Insertable(list).ExecuteCommand();
}
#endregion
#region 查询
void QueryData()
{
// 全部数据
var all = _db.Queryable<UserInfo>().ToList();
// LINQ 条件筛选
var filterList = _db.Queryable<UserInfo>()
.Where(u => u.Age > 18 && u.UserName.Contains("张"))
.OrderByDescending(u => u.CreateTime)
.ToList();
// 单条
var single = _db.Queryable<UserInfo>().First(u => u.Id == 1);
// 只查询部分字段(投影)
var dtoList = _db.Queryable<UserInfo>()
.Select(u => new { u.Id, u.UserName, u.Age })
.ToList();
// 判断是否存在
bool exist = _db.Queryable<UserInfo>().Any(u => u.Id == 1);
}
/// 分页查询(MySQL LIMIT 分页自动生成)
void PageQuery()
{
int pageIndex = 1;
int pageSize = 10;
var pageData = _db.Queryable<UserInfo>()
.Where(u => u.Age > 18)
.ToPageList(pageIndex, pageSize, out long total);
Console.WriteLine($"总记录数:{total}");
}
#endregion
#region 修改
void UpdateDemo()
{
// 方式1:根据实体主键更新
var user = _db.Queryable<UserInfo>().First(u => u.Id == 1);
user.Age = 30;
_db.Updateable(user).ExecuteCommand();
// 方式2:条件批量更新,不查询实体
_db.Updateable<UserInfo>()
.SetColumns(u => u.Age == 35)
.Where(u => u.UserName == "李四")
.ExecuteCommand();
}
#endregion
#region 删除
void DeleteDemo()
{
// 根据主键删除
_db.Deleteable<UserInfo>().In(1).ExecuteCommand();
// 条件批量删除
_db.Deleteable<UserInfo>().Where(u => u.Age < 16).ExecuteCommand();
}
#endregion
#region 联表查询
void JoinTableQuery()
{
var result = _db.Queryable<UserInfo, OrderInfo>((u, o) => u.Id == o.UserId)
.Select((u, o) => new
{
u.UserName,
o.OrderNo,
o.Amount
})
.ToList();
}
#endregion
#region 原生SQL执行MySQL语句
void ExecuteNativeSql()
{
string sql = "select * from user_info where age > @age";
var list = _db.Ado.SqlQuery<UserInfo>(sql, new { age = 18 });
// 执行增删改原生SQL
string updateSql = "update user_info set age=@age where id=@id";
_db.Ado.ExecuteCommand(updateSql, new { age = 26, id = 2 });
}
#endregion
#region MySQL事务
void TransactionTest()
{
var db = SqlSugarHelper.Db;
try
{
db.BeginTran();
long uid = db.Insertable(new UserInfo { UserName = "小明", Age = 20, CreateTime = DateTime.Now })
.ExecuteReturnBigIdentity();
db.Insertable(new OrderInfo
{
UserId = uid,
OrderNo = "ORD20260625",
Amount = 99.99m
}).ExecuteCommand();
db.CommitTran();
Console.WriteLine("事务提交成功");
}
catch (Exception ex)
{
db.RollbackTran();
Console.WriteLine($"事务回滚:{ex.Message}");
}
}
#endregion
}
}
五、CodeFirst 自动创建MySQL表
无需手动执行建表语句,代码一键生成
// 单个实体建表,不存在才创建
SqlSugarHelper.Db.DbMaintenance.CreateTableByEntity<UserInfo>();
// 批量多张表
Type[] tables = { typeof(UserInfo), typeof(OrderInfo) };
SqlSugarHelper.Db.DbMaintenance.CreateTableByEntity(tables);
六、连接串常用参数说明(MySQL踩坑指南)
Port=3306
MySQL默认端口3306,修改过端口必须指定SslMode=None
本地开发关闭SSL;服务器生产环境改为SslMode=RequiredAllowLoadLocalInfile=true
开启后支持SqlSugar大数据批量导入功能CharSet=utf8mb4
需要存储emoji表情时追加:CharSet=utf8mb4
完整表情兼容连接串:
Server=127.0.0.1;Port=3306;Database=test_db;Uid=root;Pwd=123456;SslMode=None;CharSet=utf8mb4;AllowLoadLocalInfile=true
七、切换数据库只改两处
DbType = DbType.MySql(SQL Server是DbType.SqlServer)- 替换对应数据库连接字符串
其余CRUD LINQ代码完全不用改动,无缝切换多库。
八、和EF Core / LINQ to SQL 简单对比MySQL优势
- SqlSugar对MySQL语法深度适配,分页、批量、大小写、下划线映射开箱即用;
- 批量插入性能优于原生EF Core(不用额外安装批量扩展包);
- LINQ写法和老LINQ to SQL高度相似,老项目迁移成本极低;
- 内置分表分库、租户、软删除,政企MySQL项目使用广泛。

浙公网安备 33010602011771号