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

孫凱旋發表於2018-02-21

背景

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和建庫指令碼

 

下一篇

 https://www.cnblogs.com/sunkaixuan/p/9787566.html

 

相關文章