SqlSugar ORM 入门(简介和增删查改)

这篇具有很好参考价值的文章主要介绍了SqlSugar ORM 入门(简介和增删查改)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

SqlSugar ORM是一个国产的,提供对象/关系映射(ORM)的库。

(ORM 是 Object Relational Mapping 的缩写,译为“对象关系映射”。

它解决了对象和关系型数据库之间的数据交互问题。                       

使用面向对象编程时,数据很多时候都存储在对象里面,具体来说是存储在对象的各个属性(也称成员变量)中。 例如有一个 User 类,它的 id、username、password、email 属性都可以用来记录用户信息。

当我们需要把对象中的数据存储到数据库时,按照传统思路,就得手动编写 SQL 语句,将对象的属性值提取到 SQL 语句中,然后再调用相关方法执行 SQL 语句。                         

而有了 ORM 技术以后,只要提前配置好对象和数据库之间的映射关系,ORM 就可以自动生成 SQL 语句,并将对象中的数据自动存储到数据库中,整个过程不需要人工干预。)

除了拥有媲美原生的性能 另外还有满足各种需求的功能,简单好用一分钟就能够轻松上手。                  

介绍描述

  • 支持跨数据库查询
  • 支持 SqlServer、MySql、PgSql 和 Oracle 插入批量复制
  • 分表大数据自处理
  • 支持多租户、多库事务
  • 支持代码优先数据迁移。
  • 支持加入查询、全部合并、子查询
  • 支持 配置查询
  • 支持从数据库导入实体类,或使用生成工具。
  • 支持一对多和多对多导航属性
  • 支持 MySql、SqlServer、Sqlite、Oracle 、 postgresql 、QuestDb、ClickHouse、达梦、人大金仓 、神通数据库、瀚高、MsAccess、华为GaussDB、GBase 8s、Odbc、Custom
  • 支持AOP、差异日志、查询过滤器

功能: 批量操作、CodeFirst、DbFirst、二级分布式缓存、AOP、读写分离、自定义Sql函数的扩展、动态表别名列别名,属性表别名列别名,拉姆达子查询,JOIN,UNIONALL,插入支持了默认值,更新支持了指定列排除列等常用功能

优点: 性能、语法简单、功能强大和持续更新维护

安装下载

下载地址:(也可以在 visual studio里程序安装包下载)

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(必填):连接字符串

SqlSugarClient db = new SqlSugarClient(new ConnectionConfig() {
ConnectionString = Config.ConnectionString, //必填

2.DataType必填: 数据库类型

DbType = DbType.SqlServer, //必填,数据库类型为sqlserver

3.IsAutoCloseConnection:(默认false)是否自动释放数据库,设为true我们不需要close或者Using的操作,比较推荐

IsAutoCloseConnection = true}); //是否自动释放数据库。默认InitKey=SystemTable

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是:SqlSugar在操作的时候需要一个Client,用来管理数据库连接,并操作数据库

1.插入

(插入用法、新增数据 ,添加数据 - SqlSugar 5x - .NET果糖网 (donet5.com))

db.Insertable(insertObj).ExecuteCommand(); //都是参数化实现

2.删除      

db.Deleteable<StudentModel>(1).ExecuteCommand();/*删除*/
db.Deleteable<Student>().Where(it => it.Id == 1).ExecuteCommand();//根据表达式删除

db.Deleteable<Student>()
             .Where(p => SqlFunc.Subqueryable<School>().Where(s => s.Id == p.SchoolId).Any())
             .ExecuteCommand()
//子查询删除
//Where(s => s.Id == p.SchoolId)  s和p的关联条件不能少,不然就全删了

db.DbMaintenance.TruncateTable<T>()//初始化表

3.更新

db.Updateable(updateObj).ExecuteCommand();//更新
//更新添加条件
db.Updateable(updateObj).Where(it=>it.Id==1).ExecuteCommand()
//如果是集合操作请更新到5.0.4版本之前版本禁止使用, 并且只有部分库支持

//只更新修改字段  5.1.1-preview11 新功能
db.Tracking(updateObj);//创建跟踪
updateObj.Name = "a1" + Guid.NewGuid();//只改修改了name那么只会更新name
db.Updateable(updateObj).ExecuteCommand();//跟踪批量操作不会生效,原因:默认最佳性能(跟踪批量性能差,自已循环)
//可以清空跟踪db.TempItems = null;

var result=db.Updateable(updateObj).IgnoreColumns(it => new {
 it.CreateTime,it.TestId }).ExecuteCommand()//不更新某列

var result=db.Updateable(updateObj).UpdateColumns(it => new { 
it.Name,it.CreateTime }).ExecuteCommand();
 //只更新某列
//UpdateColumnsIF 不能叠加,建议用表达式方式更新的SetColumnsIF

4.查询

查询所有 

List<Student> list=db.Queryable<Student>().ToList()
//select * from Student

查询总数

int count=db.Queryable<Student>().Count()
//select count(1) from Student

按条件查询

db.Queryable<Student>().Where(it=>it.Id==1).ToList()
//select * from Student where id=1
 
db.Queryable<Student>().Where(it=>it.name !=null).ToList()//不是null
//select * from Student where name is not null
 
db.Queryable<Student>().Where(it=>it.name ==null).ToList()//是null
//select * from Student where name is null
 
db.Queryable<Student>().Where(it=>it.name !="").ToList()//不是空 ,不为空
//select * from Student where name <> ''

多条件查询

db.Queryable<Student>().Where(it=>it.Id>10&&it.Name=="a").ToList()
//select * from Student where id>10 and name='a'
db.Queryable<Student>().Where(it=>it.Id>10).Where(it=>it.Name=="a").ToList()
//select * from Student where id>10 and name='a'
//如果是或者关系可以用 ||

模糊查询

db.Queryable<Student>().Where(it =>it.Name.Contains("jack")).ToList();
//select  * from  Student where name like %jack%

根据主键查询

(susgar中的single等同于EF中的SingleOrDefault)

/*单主键查询*/
db.Queryable<Student>().InSingle(2) //通过主键查询 SingleById
db.Queryable<Student>().Single(it=>it.Id==2) //根据ID查询
//select * from Student where id=2
 
 
/*多主键查询*/
var getAll=db.Queryable<Order>().WhereClassByPrimaryKey(new Order(){Pk1=1,Pk2=xx}).ToList(); //单个实体  
vargetAll=db.Queryable<Order>().WhereClassByPrimaryKey(List<Order>).ToList(); //支持集合

查询第一条,第一行

(.First() 等同于C#中的 FirstOrDefault , 没有值返回 null)

db.Queryable<Student>().First(it=>it.Id==1) //没有返回Null
//select top 1 * from Student where id=1

查询最后一条

(First() 等同于C#中的 FirstOrDefault , 没有值返回 null)

db.Queryable<Student>()
.OrderBy(it=>it.Id,OrderByType.Desc ) 倒序
.First(it=>it.Id==1) //没有返回Null
//select top 1 * from Student order by id desc where id=1

查询前几条

db.Queryable<Student>().Take(10).ToList()
//select top 10 * from Student

设置新的表名

//例1:更新表名
db.Queryable<School>().AS("Student").ToList();
//生成的SQL  SELECT [ID],[NAME] FROM  Student
//动态表名 表别名 指定表明
 
 
//例2:给表名添加前缀
db.Queryable<School>().AS("dbo.School").ToList();
//生成的SQL  SELECT [ID],[NAME] FROM  dbo.School
 
 
//如果不用AS也可以在特性中设置别名,看文档:实体本置

查询一列

db.Queryable<Student>().Select(it=>it.Name).ToList() //单值 查询列 查询单独列

查询单条

db.Queryable<Student>().Single(it=>it.Id==1) //没有返回Null,如果结果大于1条会抛出错误
//select * from Student where id=1 // 查询id等于1的单条记录

获取最大值

db.Queryable<Order>().Max(it=>it.Id);//同步 
db.Queryable<Order>().MaxAsync(it=>it.Id);//异步
//也可以用函数 SqlFunc.AggregateMax

获取最小值

db.Queryable<Order>().Min(it=>it.Id);//同步
db.Queryable<Order>().MinAsync(it=>it.Id);//异步
//也可以用函数 SqlFunc.AggregateMin

求和

db.Queryable<Order>().Sum(it=>it.Id);//同步
db.Queryable<Order>().SumAsync(it=>it.Id);//异步
//也可以用函数 SqlFunc.AggregateSum




文件写入

SqlSugarClient db = new SqlSugarClient(new ConnectionConfig() {
ConnectionString = Config.ConnectionString, //必填
DbType = DbType.SqlServer, //必填,数据库类型为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();//删除<br>//db.Aop功能<br>//db.Ado功能<br>//...

//实用技巧1:获取数据库时间我们可以用   
var dbTime = db.GetDate();
//实用技巧2: 强制设置表名(默认表名来自实体) 
db.Insertable(insertObj).AS("table01").ExecuteCommand();

修改的属性

1. DbType  数据库类型

2. ConnectionString  连接字符串

3. ConfigId 多租户唯一标识

除以上外,其它都可以使用过程中修改

 创建对象

你可以使用 SqlSugarClient 或者 SqlSugarScope 对数据库进行增、删、查、改等功能

SqlSugarClient

优点:性能比SqlSugarScope有5%左右提升

缺点: db不能跨上下文使用,需要new出一个新对象(和Dapper一样),

偶发错误难排查适合有经验用户

 模式:不能单例

SqlSugarScope (5.0.3.4)

特色功能

 如果没有.NET 开发经验的推荐使用 SqlSugarScope

 不用考虑任何线程问题,无脑使用,简单省事,较强性能,

 支持同一个上下文共享事务

 模式: 单例模式   SqlSugarScope一直new会内存泄露 一定要用单例

二、项目实例

新建项目:新建一个C#的桌面应用程序,起名为SqlSugarTest

SqlSugar ORM 入门(简介和增删查改)

引用sqlsugar 文章来源地址https://www.toymoban.com/news/detail-435642.html

SqlSugarClient db = new SqlSugarClient(
    new ConnectionConfig()
    {
        ConnectionString = "server=.;uid=sa;pwd=123456;database=test";
        DbType = DbType.SqlServer;//设置数据库类型,这里为sqlserver
        IsAutoCloseConnection = true;//是否自动释放数据库,如果存在事务,在事务结束后释放
        InitKeyType = InitKeyType.Attribute //从实体特性中读取主键自增列信息
    });
     
 
     
/*查询*/
var list = db.Queryable<StudentModel>().ToList();//查询所有
var getById = db.Queryable<StudentModel>().InSingle(1);//根据主键查询
var getByWhere = db.Queryable<StudentModel>().Where(it=>it.Id==1).ToList();//根据条件查询
var total = 0;
var getPage = db.Queryable<StudentModel>().Where(it => it.Id == 1).ToPageList(1,2,ref total);//根据分页查询
//多表查询用法 http://www.codeisbug.com/Doc/8/1124
 
/*插入*/
var data = new Student() { Name = "jack" };
db.Insertable(data).ExecuteCommand();
//更多插入用法 http://www.codeisbug.com/Doc/8/1130
 
/*更新*/
var data2 = new Student() { Id =1, Name = "jack" };
db.Updateable(data2).ExecuteCommand();
//更多更新用法 http://www.codeisbug.com/Doc/8/1129
 
/*删除*/
db.Deleteable<StudentModel>(1).ExecuteCommand();

//实用技巧1:获取数据库时间我们可以用   
var dbTime = db.GetDate();
//实用技巧2: 强制设置表名(默认表名来自实体) 
db.Insertable(insertObj).AS("table01").ExecuteCommand();

到了这里,关于SqlSugar ORM 入门(简介和增删查改)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ORM核心功能之导航属性- EFCore和 SqlSugar

    导航属性是作为.NET ORM核心功能中的核心,在SqlSugar没有支持导航属性前,都说只是一个高级DbHelper, 经过3年的SqlSugar重构已经拥有了一套 非常成熟的导航属性体系,本文不是重点讲SqlSugar而是重点讲导航属性的作用,让更多写Sql人还未使用ORM的人了解到ORM的作用。   用户根据

    2024年02月07日
    浏览(21)
  • .NET ORM 鉴别器 和 TDengine 使用 -SqlSugar

    SqlSugar 是一款 老牌 .NET 开源多库架构ORM框架 ,一套代码能支持多种数据库像Admin.net、Blog.Core、CoreShop等知名开源项目都采用了SqlSugar作为底层 在不用任何设计模式,任何框架的情况下都可以拥有最佳体验,SqlSugar做到了保姆一样的服务,直接用不需要学习 的框架,各种默认值

    2024年02月14日
    浏览(36)
  • .NET ORM核心功能之导航属性- EFCore和 SqlSugar

    导航属性是作为.NET ORM核心功能中的核心,在SqlSugar没有支持导航属性前,都说只是一个高级DbHelper, 经过3年的SqlSugar重构已经拥有了一套 非常成熟的导航属性体系,本文不是重点讲SqlSugar而是重点讲导航属性的作用,让更多写Sql人还未使用ORM的人了解到ORM的作用。   用户根据

    2024年02月07日
    浏览(38)
  • c# 实现sql查询DataTable数据集 对接SqlSugar ORM

    有时候对于已经查询到的数据集,想要进行二次筛选或者查询,还得再查一遍数据库 或者其他的一些逻辑处理不太方便,就想着为什么不能直接使用sql来查询DataTable呢? 搜索全网没找到可用方案,所以自己实现了一个。 主要实现思路是使用 SQLite In-Memory Database 内存数据库,

    2024年02月12日
    浏览(28)
  • Mybatis之增删查改

    目录 一、引言 二、Mybatis——查询 示例:查询用户 三、Mybatis——添加 示例:添加用户 四、Mybatis——删除 示例:删除用户 五、Mybatis——修改 示例:修改用户 接着上次的mybatis,我们在了解完mybatis之后,肯定要知道怎么使用,本文就来详细讲解Mybatis的增删改查事务,还不

    2024年02月03日
    浏览(37)
  • Mybatis基础---------增删查改

    目录结构 增删改 1、新建工具类用来获取会话对象 2、加入junit依赖 3、通过映射传递属性 之前的sql语句全部写在了映射文件中,然而在实际应用时是通过映射传递属性的,也就是java对象对应sql语句中的占位符属性,属性名一般和java对象中的属性名相同,我们只需要用#{}作为

    2024年01月17日
    浏览(36)
  • 【单链表】的增删查改

    🖊作者 : Djx_hmbb 📘专栏 : 数据结构 😆今日分享 : “Onc in a blu moon” : “罕见的,千载难逢的” (出现在19世纪,指的是\\\"在一个月内出现的第二次圆月”,这种现象每隔32个月发生一次。) 感谢家人的阅读,若有不准确的地方 欢迎在评论区指正!

    2023年04月27日
    浏览(46)
  • 详解MySQL增删查改

    众所周知,MySQL是非常重要的数据库语言,下面我们来回顾一下mysql的增删查改吧 MySQL创建数据库: MySQL删除数据库: MySQL删除数据库 MySQL创建数据库 MySQL增加字段 MySQL修改字段类型 MySQL修改字段名称 MySQL删除字段类型 MySQL增加字段且非空依赖 MySQL修改字段依赖 MySQL添加主键依

    2024年02月20日
    浏览(40)
  • Flask从入门到放弃五(SQLAlchemy介绍与快速使用、创建表插入数据、Scoped_session线程安全、基本增删查改、表模型、Flask-SQLAlchemy、Migrate的使用)

    SQLAlchemy是一个基于Python实现的ORM框架。该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数据API执行SQL并获取执行结果。 SQLAlchemy的组成部分有: Engine 框架的引擎 Connection Pooling 数据库连接池 Dialect 选择连接数据库的

    2024年02月04日
    浏览(39)
  • NET8 ORM 使用AOT SqlSugar 和 EF Core

    .Net8的本地预编机器码NET AOT,它几乎进行了100%的自举。微软为了摆脱C++的钳制,做了很多努力。也就是代码几乎是用C#重写,包括了虚拟机,GC,内存模型等等。而需要C++做的,也就仅仅是引导程序,本篇通过代码来看下这段至关重要的引导程序的运作模式。      SqlSugar已经

    2024年02月05日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包