SqlSugar是一款國產ORM,除了擁有媲美原生的性能 另外還有知足各類需求的功能,簡單好用一分鐘就可以輕鬆上手。html
2.x版本正式在自已公司內部項目使用git
3.x版本獲得了更多公司的喜歡不過也會抱怨有不少不足github
4.x版本17年5月發佈後獲得的評價超出了個人預期, 剛發佈的時候作了大量的單元測試,不過仍是有很多BUG,通過大量的用戶反饋8月份左右成型和穩定,而且大量的項目獲得交付,也獲得了使用者的好評,如今我認爲是一個較出色的版本因此我纔開始寫這篇文章介紹它sql
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和建庫腳本