国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

輕量級、高性能SQL ORM 之 SqlSugar

2019-11-17 02:12:39
字體:
來源:轉載
供稿:網友

輕量級、高性能SQL ORM 之 SqlSugar - asp.net

SqlSugar輕量ORM

SqlSugar是一款輕量級的MSSQL ORM ,除了具有媲美ADO的性能外還具有和EF相似簡單易用的語法。

一、介簡

優點:

1、優越的性能,查詢使用 reflection.emit 創建IL語言+委托綁定 然后對該對象進行 cache ,datareader直接賦值給cache對象,高性能拉姆達解析,總體性能媲美 ADO.NET ,查詢速度稍慢于datareader但稍快于datatable

2、大量語法糖,拉姆達表達示篩選,新穎的多表查詢 ,方便的分頁

3、支持NOLOCK查詢,提高性能

4、支持事務

5、內置實體類生成函數,無需使用第三方代碼生成器

6、簡單好用、例子齊全有問必答。

缺點:

目前只支持MSSQL,以后會全面發展

組成:

sqlSugar是由sqlSugarClientr提供統一調用模式 ,sqlSugarClientr是由5個部分組成

1、自身函數

2、實體生成

3、單表查詢

4、多表查詢

5、基類函數

如圖:

二、使用教程

查詢

1、單表或者單視圖查詢:

通過調用 db.Queryable() 的相關擴展函數 輕松搞定單表查詢

        using (SqlSugarClient db = new SqlSugarClient(connStr))//開啟數據庫連接        {                                    //查詢所有                    var student = db.Queryable<Student>().ToList();                    //查詢單條                    var single = db.Queryable<Student>().Single(c => c.id == 1);                    //取10-20條                    var page1 = db.Queryable<Student>().Where(c => c.id > 10).OrderBy("id").Skip(10).Take(20).ToList();                    //上一句的簡化寫法,同樣取10-20條                    var page2 = db.Queryable<Student>().Where(c => c.id > 10).OrderBy("id").ToPageList(2, 10);                    //查詢條數                    var count = db.Queryable<Student>().Where(c => c.id > 10).Count();                    //從第2條開始以后取所有                    var skip = db.Queryable<Student>().Where(c => c.id > 10).OrderBy("id").Skip(2).ToList();                    //取前2條                    var take = db.Queryable<Student>().Where(c => c.id > 10).OrderBy("id").Take(2).ToList();                    // Not like                     var notLike = db.Queryable<Student>().Where(c => !c.name.Contains("a".ToString())).ToList();                    // 可以在拉姆達使用 ToString和 Convert,比EF出色的地方                    var convert1 = db.Queryable<Student>().Where(c => c.name == "a".ToString()).ToList();                    var convert2 = db.Queryable<Student>().Where(c => c.id == Convert.ToInt32("1")).ToList();//                     var convert3 = db.Queryable<Student>().Where(c => DateTime.Now > Convert.ToDateTime("2015-1-1")).ToList();                    var convert4 = db.Queryable<Student>().Where(c => DateTime.Now > DateTime.Now).ToList();                    //支持字符串Where 讓你解決,更復雜的查詢                    var student12 = db.Queryable<Student>().Where(c => 1 == 1).Where("id>@id",new{id=1}).ToList();      }

  

                   //存在記錄反回true,則否返回false                    bool isAny100 = db.Queryable<Student>().Any(c => c.id == 100);                    bool isAny1 = db.Queryable<Student>().Any(c => c.id == 1);

2、單表高級查詢

根據條件查詢并分頁 

  /// <summary>        /// 根據條件查詢并且分頁        /// </summary>        /// <param name="name"></param>        /// <param name="sex"></param>        /// <returns></returns>        public static List<Student> GetStudent(string name, string sex, int pageIndex, int pageSize, string orderFileds,out int pageCount)        {            using (SqlSugarClient db = SugarDao.GetInstance())            {                var qable = db.Queryable<Student>();                if (!string.IsNullOrEmpty(name))                {                    qable = qable.Where(it => it.name.Contains(name));                }                if (!string.IsNullOrEmpty(sex))                {                    qable = qable.Where(it => it.sex == sex);                }                if (!string.IsNullOrEmpty(orderFileds))//無需擔心注入                {                    qable = qable.OrderBy(orderFileds);                }                pageCount = qable.Count();                return qable.ToPageList(pageIndex, pageSize);            }        }

  

新容器轉換

        public List<classNew> GetSelectList(int id)        {            using (SugarDao db = new SugarDao())            {                return db.Queryable<Student>().Where(c=>c.id<10).Select(c => new classNew { newid = c.id, newname = c.name,xx_name=c.name }).ToList();//不支持匿名類轉換,也不建議使用            }        }

分組查詢

 public List<SexTotal> GetSexTotal()        {            using (SugarDao db = new SugarDao())            {                return db.Queryable<Student>().Where(c => c.id < 20).GroupBy("sex").Select<Student, SexTotal>("Sex,Count=count(*)").ToList();            }        }
SELECT Sex,Count=count(*)  FROM Student  WHERE 1=1  AND  (id < 20)    GROUP BY Sex --生成結果

  

  

3、多表查詢:

說到多表查詢在眾多ORM中無論是性能還是功能上都不滿意,或者說還不如用SQL,下面是我的創意,放棄了強類型寫法,讓代碼更接近SQL語句編寫,讓SQL完全可控,也解決了OMR多表的性能問題。

還有ORDERBY、GROUPBY和APPLY等,例子中就不介紹了。

拿EF來比較一下:

EF查詢:

 var reval = (from s in db.Student                                join sc in db.School on s.sch_id equals sc.id                                join sb in db.Subject on s.id equals sb.sid                                into ssb                                from sb2 in ssb.DefaultIfEmpty()                                select new {                                s.id,                                s.name,                                s.sch_id,                                s.sex                                }).Where(c=>c.id>1).Where(c=>c.id>2).OrderBy(c=>c.id).ThenByDescending(c=>c.name).Skip(10).Take(10).ToList();

SqlSugar查詢:

      db.Sqlable().Form<Student>("s")                        .Join<School> ("sc", "sc.id", "s.sch_id", JoinType.INNER)                        .Join<subject>("sb", "sb.sid", "s.id", JoinType.LEFT).Where("s.id>@id1").Where("s.id>@id2")                        .SelectToPageList<Models.Student>("s.*", "s.id asc,s.name desc", 2, 10, new { id1=1,id2=2 });

更多的SqlSugar查詢:

                    //表名是字符串寫法                    List<School> dataList = db.Sqlable()                       .Form("school", "s")                       .Join("student", "st", "st.id", "s.id", JoinType.INNER)                       .Join("student", "st2", "st2.id", "st.id", JoinType.LEFT).Where("s.id>100 and s.id<@id").SelectToList<School>("st.*", new { id = 1 });                    //多表分頁
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁德市| 池州市| 若尔盖县| 阿拉尔市| 富顺县| 樟树市| 根河市| 凉城县| 上思县| 读书| 江川县| 永丰县| 城固县| 福州市| 湘潭县| 江达县| 大荔县| 错那县| 色达县| 云安县| 台前县| 南澳县| 凤台县| 徐州市| 江阴市| 潞城市| 巫溪县| 宣化县| 拉萨市| 麻栗坡县| 洛宁县| 浑源县| 同德县| 铜川市| 武夷山市| 金秀| 偏关县| 郴州市| 郁南县| 商水县| 尉氏县|