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

背景

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和建库脚本

 

下一篇

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

相关文章
相关标签/搜索