1. 程式人生 > >SqlSugar ORM 入門到精通【一】入門篇

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

實現簡單 tar contex postgresq primary sim 穩定 acache 成了

背景

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.Ado.Queryable<T,T2> //實現復雜查詢

  

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

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

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

下一篇預告

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

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

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