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 ...
随机推荐
- 安装win8+Ubuntu14.04双系统的经验总结
当时查资料,很多人推荐了easyBCD直接安装ubuntu,但是在我的笔记本上行不通.我的笔记本是Lenovo V480+win8正版系统.这是因为我的笔记本的引导结构是EFI,而不是MBR.我的方法 ...
- [国嵌攻略][162][USB协议分析]
USB设备逻辑结构 在USB设备的逻辑组织中,包含设备.配置.接口和端点4个层次.设备通常有一个或多个配置,配置通常有一个或多个接口,接口通常有零个或多个端点. USB设备描述符 当我们把USB设备( ...
- oracle数据泵备份与恢复库
假如 导出库的用户名是tiger,密码是1 导入到用户名是scott,密码是1 备份库 expdp tiger/1@orcl dumpfile=expdp.dmp DIRECTORY=dpdata ...
- mysql习题
如图表创建数据库. create table class( cid int auto_increment primary key, caption ) )engine=innodb default c ...
- 二维数组模拟实现酒店管理系统-java
业务分析 1.需要一个房间类,包含房间的属性,比如房间编号.房间类型.是否占用. 2.需要一个旅馆类,旅馆有房间,提供的方法需要有 预订房间.打印房间信息.初始化房间.退房. 3.测试类,测试预订房间 ...
- linux 树型显示文件 tree ls tree 命令
原创 2016年07月27日 09:50:19 yum install tree tree www │?? │?? │?? └── xml.test │?? │?? └── valgrind.su ...
- Thinkphp 3.2中文章详情页的上一篇 下一篇文章功能
额 简单2句话解释下 获取上一篇文章的原理,其实就是以当前文章的id为起点进行进行查询,例如id=5的文章 select * from article where (article_id<5 ...
- php页面zend加密乱码的解决办法
http://www.chinaz.com/program/2008/1021/41485.shtml?qq-pf-to=pcqq.group 今天在服务器部署一个php程序是有zend加密的页面出现 ...
- Algorithms code
一些值得回看的小算法. 最长的连续子数组 子数组数字不重复 int [] arr={1,2,3,4,7}; //输出4 int [] arr1={1,2,3,4,1,2,3,4,5,1}; //输出5 ...
- mybatis实战教程三:多对多关联
MyBatis3.0 添加了association和collection标签专门用于对多个相关实体类数据进行级联查询,但仍不支持多个相关实体类数据的级联保存和级联删除操作 一.创建student.te ...