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

背景

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 实现动态询功能

原文地址:https://www.cnblogs.com/sunkaixuan/p/8454844.html

时间: 2024-10-29 11:13:51

SqlSugar ORM 入门到精通【一】入门篇的相关文章

SaltStack 入门到精通 - 第七篇: Targeting

什么是Targeting? Targeting minions 是指那些minion会作为运行命令或是执行状态的目标.这些目标可以是一个主机名,系统信息,定义的分组,甚至是自定义的绑定的对象. 例如命令  salt web1 apache.signal restart 可以重启ID 为web1的minion的apache.当然也可以在top文件中使用web1来作为目标匹配的内容: base:   'web1':     - webserver Targing 有哪些匹配方式? Minion Id

SaltStack 入门到精通 - 第八篇: 了解States

什么是Salt States Salt States是Salt模块的扩展 主系统使用的状态系统叫SLS系统. SLS代表Saltstack State. Salt状态是一些文件,其中包含有关如何配置Salt 子节点的信息. 这些状态被存在一个目录树下,可以用许多不同的格式来写. 我们可以把这些Salt States当作是对minion的管理脚本的配置模式,通过配置sls文件,指定目标minions,可以实现在master上对minions的运行状态进行管理. Salt State树 跟系统文件树

SaltStack 入门到精通第三篇:Salt-Minion配置文件详解

SaltStack 入门到精通第三篇:Salt-Minion配置文件详解 作者:ArlenJ  发布日期:2014-06-09 17:52:16 ##### 主要配置设置 ##### 配置 默认值 说明 例子 default_include minion.d/*.conf master可以从其他文件读取配置,默认情况下master将自动的将master.d/*.conf中的配置读取出来并应用,其中master.d目录是相对存在于主配置文件所在的目录 default_include: minion

Java入门到精通——调错篇之Spring2.5利用aspect实现AOP时报错: error at ::0 can&#39;t find referenced pointcut XXX

一.问题描述及原因. 利用Aspect注解实现AOP的时候出现了error at ::0 can't find referenced pointcut XXX.一看我以为注解写错了,结果通过查询相关资料是因为Spring2.5与中的aspectjweaver.jar 和aspectjrt.jar这两个jar包与JDK1.7不匹配. org.springframework.beans.factory.BeanCreationException: Error creating bean with n

Redis从入门到精通:初级篇

原文链接:http://www.cnblogs.com/xrq730/p/8890896.html,转载请注明出处,谢谢 Redis从入门到精通:初级篇 平时陆陆续续看了不少Redis的文章了,工作中也一直在用Redis,感觉是时候对过往Redis的所学进行一次系统性的总结.<Redis从入门到精通>系列会分为初级.中级.高级三篇,从浅入深讲解Redis相关知识点. 在本文中,我们将看到以下内容: Redis简介 Redis安装.启动 Redis登录授权 Redis配置文件redis.conf

数据库从入门到精通(安装篇)

一.数据库介绍 了解数据库之前我们先来了解几个概念,什么是数据,什么是数据库,什么是数据库管理系统,什么是数据库系统? 数据(Data): 描述事物的符号记录称为数据,描述事物的符号既可以是数字,也可以是文字.图片,图像.声音.语言等,数据由多种表现形式,它们都可以经过数字化后存入计算机,这就是数据. 数据库(DB): 数据库是长期存放在计算机内.有组织.可共享的数据.数据库中的数据按一定的数据模型组织.描述和储存,具有较小的冗余度.较高的数据独立性和易扩展性,并可为各种用户共享. 数据库管理系

Redis从入门到精通:中级篇

原文链接:http://www.cnblogs.com/xrq730/p/8944539.html,转载请注明出处,谢谢 本文目录 上一篇文章以认识Redis为主,写了Redis系列的第一篇,现在开启第二部分的学习,在本文中,我们将看到以下内容: Redis数据结构String.Hash.List.Set.SortedSet及相关操作,提一下Redis在3.2.0之后有新增了一种GEO的数据类型表示地理位置,不过本文这种数据结构略过 Redis其他一些常用命令,分为Key操作与服务器操作 Red

Java入门到精通——调错篇之Spring2.5使用AOP时报错only available on JDK 1.5 and higher

一.问题描述及原因. 在Spring2.5Aop例子中的时候会出现一个错误only available on JDK 1.5 and higher,大概意思就是需要JDK1.5甚至更高版本.但是我用的是JDK1.8是比1.5高啊但是为什么报错呢?通过查阅资料此链接:http://fanli7.net/a/JAVAbiancheng/Spring/20140321/481981.html.上面说看源码是org.springframework.context.annotation.Annotatio

Java入门到精通——调错篇之Eclipse No Java virtual machine was found after searching the following locations

一.错误现象. 在一次启动Eclipse的时候弹出了下面的错误 二.错误原因 原因是没有找到javaw.exe文件的路径. 三.解决方案 在eclipse根目录下找到eclipse.ini加入下面一句话 -vm D:\Java\jdk1.8.0_25\bin(jdk的bin目录路径)

Java入门到精通——调错篇之Eclipse Java compiler level dose not match the version of the installed Java project

一.错误现象. java项目显示红色,并且类中引用包中会报红色错误,在Eclipse下面显示下面错误提示如图: 二.错误原因. 通过字面意思一看就很明白java的版本不对. 三.解决办法. 3.1右键项目"Properties",在弹出的"Properties"窗口左侧. 3.2单击"Project Facets",打开"Project Facets"页面,更改java版本 对了大家最后别忘了点击Apply