SqlSugar ORM 入門到精通【一】入門篇

来源:https://www.cnblogs.com/sunkaixuan/archive/2018/02/21/8454844.html
-Advertisement-
Play Games

背景 SqlSugar是一款國產ORM,除了擁有媲美原生的性能 另外還有滿足各種需求的功能,簡單好用一分鐘就能夠輕鬆上手。 2.x版本正式在自已公司內部項目使用 3.x版本得到了更多公司的喜歡不過也會抱怨有很多不足 4.x版本17年5月發佈後得到的評價超出了我的預期, 剛發佈的時候做了大量的單元測試 ...


背景

SqlSugar是一款國產ORM,除了擁有媲美原生的性能 另外還有滿足各種需求的功能,簡單好用一分鐘就能夠輕鬆上手。

2.x版本正式在自已公司內部項目使用

3.x版本得到了更多公司的喜歡不過也會抱怨有很多不足

4.x版本17年5月發佈後得到的評價超出了我的預期, 剛發佈的時候做了大量的單元測試,不過還是有不少BUG,經過大量的用戶反饋8月份左右成型和穩定,並且大量的項目得到交付,也得到了使用者的好評,現在我認為是一個較出色的版本所以我才開始寫這篇文章介紹它

5.x版本 預計今年的5月份發佈試用版本會完美兼4.X版本,隨著幾年對emit和拉姆達解析的深入理解,5.x版本將會有顛覆ORM的改變,具體什麼樣的功能暫時保密。

 

介紹

支持:Oracle、Mysql、Sqlite、SqlSever四種資料庫,Postgresql年後也將支持已經在開發中了,支持的欄位數據類型也是相當齊全

功能: 批量操作、CodeFirst、DbFirst、二級分散式緩存、AOP、讀寫分離、自定義Sql函數的擴展、動態表別名列別名,屬性表別名列別名,拉姆達子查詢,JOIN,UNIONALL,插入支持了預設值,更新支持了指定列排除列等常用功能

優點: 性能、語法簡單、功能強大和持續更新維護

安裝下載

下載地址:

https://github.com/sunkaixuan/SqlSugar

Nuget:

.net 4.0及以上版本: Install-Package sqlSugar 

.net core 2.0 版本:Install-Package sqlSugarCore

 

連接資料庫

SqlSugar是通過SqlSugarClient來進行資料庫的操作,而創建SqlSugarClient我們需要ConnectionConfig這個類對象

ConnectionConfig有6個屬性分別是:

1.ConnectionString(必填):連接字元串

2.DataType必填: 資料庫類型

3.IsAutoCloseConnection:(預設false)是否自動釋放資料庫,設為true我們不需要close或者Using的操作,比較推薦

 

4.InitKeyType:(預設SystemTable)初始化主鍵和自增列信息的方式(註意:如果是資料庫許可權受管理限制或者找不到主鍵一定要設成attribute)

InitKeyType.SystemTable表示自動從資料庫讀取主鍵自增列的信息(適合SA等高許可權的賬戶)

 如果是這種模式實體類就普通的實體類便可以,不需要加任何東西

InitKeyType.Attribute 表示從實體類的屬性中讀取 主鍵和自增列的信息(適合有獨立的運維組的用戶沒有系統表操作許可權)

 如果是這種模式實體類需要有所改變

[SugarColumn(IsPrimaryKey=true,IsIdentity=true)] //如果是主鍵並且是自增列就加上2個屬性
[SugarColumn(IsPrimaryKey=true)]//如果只是主鍵只能加一個  

 

5.MoreSettings 

用於一些全局設置

MoreSettings .IsAutoRemoveDataCache 為true表示可以自動刪除二級緩存

MoreSettings .IsWithNoLockQuery 為true表式查詢的時候預設會加上.With(SqlWith.NoLock),可以用With(SqlWith.Null)讓全局的失效

6.ConfigureExternalServices

可以擴展你想要的序列化方式和緩存方式等服務

 

實現一個簡單的增、刪、查和改

SqlSugarClient db = new SqlSugarClient(new ConnectionConfig() { 
ConnectionString = Config.ConnectionString, //必填
DbType = DbType.SqlServer, //必填
IsAutoCloseConnection = true}); //預設InitKey=SystemTable


var list=db.Queryable<Student>().ToList();//查詢所有(使用SqlSugarClient查詢所有到LIST)

var list2 = db.Queryable<Student, School, Student, Student, Student>((st, sc, st2, st3, st4) => new object[] {
JoinType.Left,st.SchoolId==sc.Id,
JoinType.Left,st.Id==st2.Id,
JoinType.Left,st.Id==st3.Id,
JoinType.Left,st.Id==st4.Id
})
.Where((st,sc)=>sc.Id==1)
.Select((st, sc, st2,st3,st4) => new { id= st.Id ,name=st.Name,st4=st4}).ToList();//5表查詢


db.Insertable(insertObj).ExecuteCommand();//插入
db.Updateable(updateObj).ExecuteCommand();//更新
db.Deleteable<Student>(1).ExecuteCommand();//刪除
//db.Aop功能
//db.Ado功能
//...

SqlSugarClient對象可以完成非常複雜的資料庫操,這些功能會在後面介紹

 

簡化增、刪、查和改

SqlSugarClient對象雖然強大但是大多數用戶還是會在我的基礎上在封裝一層倉儲然後簡化增刪查改,複雜的功能在用SqlSugarClient實現

所以我就集成了SimpleClient這個類讓你不用在去寫額外代碼。

 

你可以建一個類繼承SimpleClient或者直接使用SimpleClient

//我們就來擴展一個SimpleClient取名叫DbSet
public class DbSet<T>:SimpleClient<T> where T : class, new()
{
    public DbSet(SqlSugarClient context):base(context)
    {
            
    }
    //SimpleClient中的方法滿足不了你,你可以擴展自已的方法
    public List<T> GetByIds(dynamic [] ids)
    {
        return Context.Queryable<T>().In(ids).ToList(); ;
    }
}

 

我們來創建一個DbContext類,裡面包含了Db、StudentDb和SchoolDb 

//創建一個DbContext類,使用DbSet(或者SimpleClient)
public class DbContext
{
        public DbContext()
        {
            Db = new SqlSugarClient(new ConnectionConfig()
            {
                ConnectionString = "xx",
                DbType = DbType.SqlServer,
                IsAutoCloseConnection = true,//開啟自動釋放模式和EF原理一樣我就不多解釋了
                //InitKey預設SystemTable
            });
        }
        public SqlSugarClient Db;//用來處理事務多表查詢和複雜的操作
        public DbSet<Student> StudentDb { get { return new DbSet<Student>(db); } }//用來處理Student表的常用操作
        public DbSet<School> SchoolDb { get { return new DbSet<School>(db); } }//用來處理School表的常用操作
}

  

我們只要繼承DbContext就可以方便的操作資料庫

 

使用 DbSet 對象實現增刪查和改
StudentDb.GetList(
StudentDb.GetById
StudentDb.Delete
StudentDb.Update
StudentDb.Insert
StudentDb.GetPageList

使用SqlSugarClient對象
Db.Ado.UseTran(()=>{ 事務內的操作 })//事務操作
Db.Queryable<T,T2> //實現複雜查詢

  

 

通過本篇相信你已經可以方便的用SqlSugar ORM實現簡單的增、刪、查和改了

 

註意:我上面的例子使用的是預設InitKey方式實現的,如果用InitKey.Attribute需要在實體的屬性上添加主鍵標記,在本篇的連接資料庫中有詳細介紹。

如果還不明白的話可以下載 https://github.com/sunkaixuan/SqlSugar 裡面有詳細的DEMO和建庫腳本

 

下一篇預告

介紹SimpleClient具體函數和使用場景

結合主流js插件 bootstrap-table 實現動態詢功能


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Servlet規範是一套技術標準,包含與Web應用相關的一系列介面,而具體的Servlet容器負責提供標準的實現,如Tomcat。 Servlet的實例對象由Servlet容器負責創建,Servlet的方法由容器在特定情況下調用,Servlet容器在關閉Web應用時銷毀Servlet對象實例。 1. ...
  • 今天從開始寫了一個jdbc連接mysql驅動的程式 真的是各種報錯啊 首先這是代碼 嗯,先說下問題 項目運行時會出現 首先這個錯誤我無法復現,因為我的項目是maven管理的 jdbc驅動是5.1.6 這個錯誤是因為maven網路不好而引起的jar包出現錯誤,只要eclispe載入jar的位元組文件不是 ...
  • 第一種參數獲取方式: 編寫一個前端頁面,提交表單,做示例: 每次訪問Action都會創建一個新的實例(線程安全): 第二種方式獲取參數: 封裝一個實體類: 表單要修改下: 獲取參數: 第三種方式獲取參數: 模型驅動: 前端代碼: 獲取參數: 第四種獲取參數方式: 集合類型封裝: 前端表單: 獲取參數 ...
  • 本案例通過實現一個註冊頁面的編寫,來帶你瞭解FLASK-WTF的運用. 主要功能為表單基礎的功能--手機號碼必須為11位數,且通過資料庫查找不能有已經註冊的了,密碼要求輸入兩遍且必須一樣,且所有內容不能為空的提示等內容.那麼現在就開始把! 一.創建表單類. 首先運用flask-wtf你必須確保你的環 ...
  • 前言 MatrixTree定理是用來解決生成樹計數問題的有利工具 比如說 "這道題" MatrixTree定理的演算法流程也非常簡單 我們記矩陣$A$為無向圖的度數矩陣 記矩陣$D$為無向圖的鄰接矩陣 $A$矩陣是除了對角線之外各個點值都為$0$的矩陣,$A[i][i]$表示$i$號點的度數 $D$矩 ...
  • 一. 認證系統概要 create_user 創建用戶 authenticate 驗證登錄 login 記住用戶的登錄狀態 logout 退出登錄 is_authenticated 判斷用戶是否登錄 login_required 判斷用戶是否登錄的裝飾器 二. 創建用戶和驗證登錄 1. 當用戶註冊的時 ...
  • VS for Mac連接Git的時候遇到個奇怪的問題, 無法將已存在的解決方案綁定並提交到GitHub中去. VS版本7.3.3 問題復現 以為自己操作有問題, 新建項目測試一下, 新建的時候沒有勾選"Use git"選項, 新建好的項目預設選中瞭解決方案的根, 但打開Version Control ...
  • 微軟 ASP.NET 團隊近日正式開源了Blazor,這是一個Web UI框架,可通過WebAssembly在任意瀏覽器中運行 .Net。 Blazor旨在簡化快速的單頁面 .Net 瀏覽器應用的構建過程,它雖然使用了諸如 CSS 和 HTML 之類的 Web 技術,但它使用 C#語言和 Razor ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...