使用開源框架Sqlsugar結合mysql開發一個小demo
阿新 • • 發佈:2022-01-10
使用開源框架Sqlsugar結合mysql開發一個小demo
https://cloud.tencent.com/developer/article/1601136
一、Sqlsugar簡介
1.效能上有很大優勢
sqlsugar是效能最好的ORM之一,具有超越Dapper的效能 ,走的是EMIT夠構中間語言動態編譯到程式集,完成高效能的實體繫結,達到原生水平。
2.功能非常強大
除了EF以外可以說的是功能最大的ORM框架
支援 DbFirst、CodeFirst、資料庫維護、鏈式查詢、鏈式更新、鏈式刪除、鏈式插入、實體屬性、複雜模型的查詢、ADO.NET。特別是批量等功能都是貨真價實的並非迴圈操作。
SqlSugar 4.0版本 6月底支援SqlSever的Core版 ,預計7月份支援多庫,8月分開始分散式ORM的開發。 (3.x版本已經支援了4種資料庫,相對穩定功能簡單)
3.語法簡單
完美的語法,可以秒殺現有所有ORM框架
詳細語法請看孫凱旋部落格園 http://www.codeisbug.com/Doc/8
二、主要介紹的是如何使用結合mysql資料庫使用Sqlsugar
1.新建解決方案,自定義解決方案名稱和儲存路徑
2.此時我們需要新增三個包,首先找到工具 =》NuGet包管理器 =>管理解決方案的NuGet程式包
3.依次新增以下三個程式包
Newtonsoft.Json:要注意最好新增較高版本的,否則會有相容性問題
Sqlsugar:這個版本要根據你的.Net Framework的版本選擇你合適的版本,這裡我用的是.Net Framework4.5所以我安裝的是sqlsugar5.0.0.8
MySql.Data
4.準備工作已經做完了,現在可以開始正文了
先貼一段程式碼,這個是我封裝的一個操作資料庫的一個類,我採用的是單例模式,不過有個弊端就是不能使用高併發的情況
public class DBContext<T> where T : class, new()
{
public SqlSugarClient Db;
private static DBContext<T> mSingle = null;
public static DBContext<T> GetInstance()
{
if (mSingle == null)
mSingle = new DBContext<T>();
return mSingle;
}
protected DBContext()
{ //通過這個可以直接連線資料庫
Db = new SqlSugarClient(new ConnectionConfig()
{
//可以在連線字串中設定連線池pooling=true;表示開啟連線池
//eg:min pool size=2;max poll size=4;表示最小連線池為2,最大連線池是4;預設是100
ConnectionString = "database='" + "BookShop" + "';Data Source = '" + "127.0.0.1" + "'; User Id = '" + "root" + "'; pwd='" + "1234" + "';charset='utf8';pooling=true",
DbType = SqlSugar.DbType.MySql,//我這裡使用的是Mysql資料庫
IsAutoCloseConnection = true,//自動關閉連線
InitKeyType = InitKeyType.Attribute
});
//調式程式碼 用來列印SQL
//Db.Aop.OnLogExecuting = (sql, pars) =>
//{
// Console.WriteLine(sql + "\r\n" +
// Db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));
// Console.WriteLine();
//};
}
public void Dispose()
{
if (Db != null)
{
Db.Dispose();
}
}
public SimpleClient<T> CurrentDb { get { return new SimpleClient<T>(Db); } }
/// <summary>
/// 獲取所有
/// </summary>
/// <returns></returns>
public virtual List<T> GetList()
{
return CurrentDb.GetList();
}
/// <summary>
/// 根據表示式查詢
/// </summary>
/// <returns></returns>
public virtual List<T> GetList(Expression<Func<T, bool>> whereExpression)
{
return CurrentDb.GetList(whereExpression);
}
/// <summary>
/// 根據表示式查詢分頁
/// </summary>
/// <returns></returns>
public virtual List<T> GetPageList(Expression<Func<T, bool>> whereExpression, PageModel pageModel)
{
return CurrentDb.GetPageList(whereExpression, pageModel);
}
/// <summary>
/// 根據表示式查詢分頁並排序
/// </summary>
/// <param name="whereExpression">it</param>
/// <param name="pageModel"></param>
/// <param name="orderByExpression">it=>it.id或者it=>new{it.id,it.name}</param>
/// <param name="orderByType">OrderByType.Desc</param>
/// <returns></returns>
public virtual List<T> GetPageList(Expression<Func<T, bool>> whereExpression, PageModel pageModel, Expression<Func<T, object>> orderByExpression = null, OrderByType orderByType = OrderByType