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=SystemTablevar 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
转载于:https://www.cnblogs.com/sunkaixuan/p/8454844.html
SqlSugar ORM 入门到精通【一】入门篇相关推荐
- Redis从入门到精通:初级篇(转)
原文链接:http://www.cnblogs.com/xrq730/p/8890896.html,转载请注明出处,谢谢 Redis从入门到精通:初级篇 平时陆陆续续看了不少Redis的文章了,工作中 ...
- 视频教程-SQL语句从入门到精通迅速提升篇视频课程(Oracle零基础版)-Oracle
SQL语句从入门到精通迅速提升篇视频课程(Oracle零基础版) 某公司区域交付运营总监,丰富的项目管理经验,带过1个亿级项目,千万级项目10余个. 陈志文 ¥118.00 立即订阅 扫码下载「CSD ...
- MySQL零基础从入门到精通(函数篇)
MySQL零基础从入门到精通(函数篇) 在MySQL中,为了提高代码重用性和隐藏实现细节,MySQL提供了很多函数.函数可以理解为别人封装好的模板代码. 分类 聚合函数 数学函数 字符串函数 日期函数 ...
- 视频教程-2019版抓包分析-Wireshark从入门到精通【进阶篇】-其他
2019版抓包分析-Wireshark从入门到精通[进阶篇] G-LAB IT实验室创始人.知名讲师.同时拿到路由交换.网络安全.数据中心3个方向的CCIE专家级别认证.教学风趣幽默,广受学员好评 郭 ...
- 视频教程-30小时微信小程序从入门到精通课程-基础篇-微信开发
30小时微信小程序从入门到精通课程-基础篇 8年IT开发经验,6年IT教育经验,喜欢把复杂逻辑用简单的表述传达给学生,传授编程知识,讲述生活故事 曹圣捷 ¥12.00 立即订阅 扫码下载「CSDN程序 ...
- android bsp入门到精通,网管教程:从入门到精通(软件篇).pdf
网管教程:从入门到精通(软件篇) Ver 1.1 Feihon (609095519 )整理 2010-4-26 (资料来自 IT 网绚技术赸级群癿分享,本人仅提供整理,原作者未知 ) 网管教程:从入 ...
- seo从入门到精通_SEO入门到精通(七):SEO工作的流程是什么?
刚入门seo会对这个行业的工作流程产生疑问,或者因为自己学习的seo知识比较零散,无法去把控seo工作的整体流程,本文会给大家讲解下企业站通用的seo优化流程: 行业概况分析→企业实况分析→竞品分析→ ...
- Mybatis从入门到精通二(入门详解)
Mybatis从入门到精通二(想学Mybatis,看了这一篇你就不需要其他的了) 本课程分为两天第一天的请参考: https://blog.csdn.net/weixin_43564627/artic ...
- python3入门到精通pdf-Python3入门到精通实战特训
原标题:Python3入门到精通实战特训 随着时间的推移,python2.7版本很快就要停止官方更新了.如果你还没来及正式考虑版本迁移问题,或者你是一个python新手.那么就很有必要一试本课程,一方 ...
- java从入门到精通_Java入门到精通、学习路线、就业方向、薪资及前景分析(上篇)...
今天就大家最关心的Java热门问题进行简要分析,希望能对想要学习或是正在学习Java的小伙伴能够有所帮助~(大家多多关注呦~) 一.首先我们要了解Java是什么? 好学吗? Java是一种广泛使用的计 ...
最新文章
- 山重水复疑无路,柳暗花明又一村
- 无法显示服务器级别,URL Rewrite会导致“无法显示此页面”
- ActiveMQ_使用经验
- 一个Android开发者开博一周年的成长日记——送给不知如何下手的【初级开发者】和【在校生】...
- C# 8.0 中开启默认接口实现
- art-template入门(六)之解析规则
- JavaScript中的arguments对象
- Linux驱动段错误,linux驱动调试--段错误之oops信息分析
- 学习nodejs之restful
- MyBatis实现模糊查询的几种方式
- java制作大富翁游戏_JAVA大富翁游戏的设计+流程图+总结体设计图-论文.doc
- Tomcat反射时报错java.lang.ClassNotFoundException
- 员工工号怎么编码_员工编号管理制度
- python lambda拉姆达表达式
- serviceWorker 服务器与浏览器之间的代理
- Android常用高质量框架
- 全基因组选择中准确性的影响因素
- 大话设计模式18----备忘录模式
- Context-Free Grammar及形状规则集
- 没有一个冬天不可逾越
热门文章
- python话雷达图-Python 详解雷达图/蛛网图
- python基础教程教材-最好的Python入门教材是哪本?
- python怎么安装requests库-Python爬虫入门requests库的安装与使用
- python教学在线观看-python在线学习
- python第三方库安装-python的第三方库安装
- python第三方库numpy-Python中的第三方库——Numpy
- python安装包-Python软件包的安装(3种方法)
- 疯狂python讲义视频 百度云-每周一书《疯狂Python讲义》分享!
- python处理excel的工具-基于Python的Excel处理工具
- python学起来难不难-零基础学Python爬虫难不难?要怎么学?