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.Queryable<T,T2> //实现复杂查询
通过本篇相信你已经可以方便的用SqlSugar ORM实现简单的增、删、查和改了
注意:我上面的例子使用的是默认InitKey方式实现的,如果用InitKey.Attribute需要在实体的属性上添加主键标记,在本篇的连接数据库中有详细介绍。
如果还不明白的话可以下载 https://github.com/sunkaixuan/SqlSugar 里面有详细的DEMO和建库脚本
下一篇
https://www.cnblogs.com/sunkaixuan/p/9787566.html
SqlSugar ORM 入门到精通【一】入门篇的更多相关文章
- Redis从入门到精通:初级篇
原文链接:http://www.cnblogs.com/xrq730/p/8890896.html,转载请注明出处,谢谢 Redis从入门到精通:初级篇 平时陆陆续续看了不少Redis的文章了,工作中 ...
- Redis从入门到精通:初级篇(转)
原文链接:http://www.cnblogs.com/xrq730/p/8890896.html,转载请注明出处,谢谢 Redis从入门到精通:初级篇 平时陆陆续续看了不少Redis的文章了,工作中 ...
- SaltStack 入门到精通第三篇:Salt-Minion配置文件详解
SaltStack 入门到精通第三篇:Salt-Minion配置文件详解 作者:ArlenJ 发布日期:2014-06-09 17:52:16 ##### 主要配置设置 ##### 配置 默认值 ...
- Swift从入门到精通第八篇 - 方法 初识
方法(学习笔记) 环境Xcode 11.0 beta4 swift 5.1 方法 结构体.枚举.类都可以定义方法(实例方法.类型方法) 实例方法(Instance Methods) 实例方法只能用实例 ...
- Swift从入门到精通第十一篇 - 初始化 初识
初始化(学习笔记) 环境Xcode 11.0 beta4 swift 5.1 初始化 初始化是类.结构体.枚举生成实例的过程,为该类的每个存储属性设置初始值,有些在实例使用前的设置或初始化也可在此实现 ...
- DDD从入门到精通:基础篇
这篇文章主要还是表述清楚DDD相关的基础概念,因为DDD入门有一定的专业名词,还是得有个基本的了解. 先讲解下领域模型作用: 对软件需求进行设计,维持其内在逻辑的一致性 1)划分边界.也是一种高内聚. ...
- Redis从入门到精通:中级篇
原文链接:http://www.cnblogs.com/xrq730/p/8944539.html,转载请注明出处,谢谢 本文目录 上一篇文章以认识Redis为主,写了Redis系列的第一篇,现在开启 ...
- Redis从入门到精通:中级篇(转)
原文链接:http://www.cnblogs.com/xrq730/p/8944539.html,转载请注明出处,谢谢 本文目录 上一篇文章以认识Redis为主,写了Redis系列的第一篇,现在开启 ...
- Java入门到精通——调错篇之解决MyEclipse 输入注册码后:Enter or update your subscription information.问题
这几天,我用MyEclipse做例子的时候总是出现下面图上面的提示: 不用看就是注册码到期了要注册.找了好几个注册码总是出现Enter or update your subscription info ...
- Java从入门到精通——调错篇之SVN 出现 Loced错误
我在更新SVN的时候同时并打开了在这SVN上的一个文档结果导致了我更新的时候提示Loced错误 解决方法:出现这个问题后使用"清理"功能,如果还不行,就直接到上一级目录,再执行&q ...
随机推荐
- PHPStorm+PHPStudy配置XDebug
img { max-width: 100% } 上一节里面从PHPStudy+PHPStorm的配置,到最后发布,PHPStorm只是承担了编辑器和发布站点的任务,但是还没有办法像Visual Stu ...
- [国嵌攻略][153][I2C裸机驱动设计]
eeprom简介 eeprom电可擦除可编程只读存储器,是一种类似于flash的固态存储器,但是与flash相比又存在一些区别: 1.eeprom可以按位擦写,而flash只能大片擦除. 2.eepr ...
- UE4 保存为bitmap
TArray<FColor> colorData; colorData.Init(FColor(0, 0, 255, 255), 1920 * 1080); for (int ...
- UserView--第二种方式(避免第一种方式Set饱和),基于Spark算子的java代码实现
UserView--第二种方式(避免第一种方式Set饱和),基于Spark算子的java代码实现 测试数据 java代码 package com.hzf.spark.study; import ...
- Ajax 跨域,这应该是最全的解决方案了
https://segmentfault.com/a/1190000012469713 前言 从刚接触前端开发起,跨域这个词就一直以很高的频率在身边重复出现,一直到现在,已经调试过N个跨域相关的问题了 ...
- laravel中数据库在哪个文件中配置
我们使用 mysql 数据库,修改 .env: DB_HOST=localhost DB_DATABASE=laravel DB_USERNAME=root DB_PASSWORD= 在mysql中创 ...
- YUM常用命令介绍
http://www.cnblogs.com/lostyue/archive/2012/05/06/2485653.html 1.列出所有可更新的软件清单 命令:yum check-update 2. ...
- 全栈开发之HTML快速入门(一)
一.HTML 是什么? HTML 指的是超文本标记语言 (Hyper Text Markup Language) HTML 不是一种编程语言,而是一种标记语言 (markup language) 标记 ...
- 解决 PHPExcel 长数字串显示为科学计数[转]
解决 PHPExcel 长数字串显示为科学计数 在excel中如果在一个默认的格中输入或复制超长数字字符串,它会显示为科学计算法,例如身份证号码,解决方法是把表格设置文本格式或在输入前加一个单引号. ...
- JAVA中科学计数法转换普通计数法
今天发现数据库里汇总的数据有点大,一输出就被自动转化成科学计数法了.后来发现是转换字符串的方法有问题.如下: String a = "11234567.89"; BigDecima ...