ShadowSql之精简版拆分
ShadowSql拆分为精简版和易用版,项目和nuget包同步拆分
ShadowSql项目拆分为ShadowSql.Core和ShadowSql
Dapper.Shadow项目拆分为Dapper.Shadow.Core和Dapper.Shadow
Dapper.Shadow.Core依赖ShadowSql.Core
Dapper.Shadow依赖ShadowSql
精简版的目标是够用、直接,基于接口编程
易用版的目标是好用、易用,基于泛型编程
易用版依赖精简版,是在精简版上扩展而来
下面举几个例子对比一下
一、读取一张表的例子
1. 精简版代码如下:
var table = SimpleDB.From("Students");
var count = table.Count(Executor);var select = new TableSelect(table);
var students = select.Get<Student>(Executor);
2.易用版代码如下:
var select = Executor.From("Students")
.ToDapperSelect();
var count = select.Count();var students = select.Get<Student>();
在《ShadowSql之借Dapper打造高性能ORM及百变魔法》中有介绍Dapper执行的3种方式
精简版只支持其中1种,易用版3种都支持
二、分页查询数据的例子
1. 精简版代码如下:
var table = new StudentTable("Students");
var query = new TableSqlQuery(table)
.Where(table.Age.GreaterEqualValue(9));
var count = query.Count(Executor);var cursor = new TableCursor(query)
.Desc(table.Id)
.Skip(1)
.Take(10);
var select = new TableSelect(cursor);
var students = select.Get<Student>(Executor);
2.易用版代码如下:
var query = new StudentTable("Students")
.ToSqlQuery()
.Where(table => table.Age.GreaterEqualValue(9));
var count = query.Count(Executor);var students = query.ToCursor()
.Desc(table => table.Id)
.Skip(1)
.Take(10)
.ToSelect()
.Get<Student>(Executor);
分页查询例子中两者的区别更明显,在易用版中如果不求count,整个过程可以全部连写,非常连贯
精简版基本每个组件要定义一个变量
易用版除了通过导航属性(扩展方法)串连各个组件外,还提供高阶函数(函数类型参数供主函数内调用)来进行个性化的查询
当然,易用版用到泛型会多出一丁点的cpu和内存开销,这些可以忽略不计的
另外这个例子也体现了本工具和SqlKata的设计思路的重大区别
SqlKata的Query是个大对象,把所有可能用到的组件都包含在内;
ShadowSql是按需分配,只有需要的时候才链接上需要的组件
这也是SqlKata比ShadowSql执行更慢,内存消耗更多的原因之一
精简版和易用版各有优缺点,萝卜白菜各有所爱,两种我都喜欢的。
如果写小工具,就偏爱易用版。如果做微服务精简版很适合。
源码托管地址: https://github.com/donetsoftwork/Shadow。
如果大家喜欢请动动您发财的小手手帮忙点一下Star。
ShadowSql之精简版拆分的更多相关文章
- Linux上oracle精简版客户端快速部署
RHEL6 + Oracle 11g客户端快速部署 需求:只是用到客户端的sqlplus, sqlldr功能. 方案:用精简版实现客户端的快速部署 1.上传oracle精简版客户端到服务器/tmp目录 ...
- ArcGIS10.2.1精简版、ArcGIS_Desktop10_Tutorial、破解文件等下载地址
原版ArcGIS for Desktop的ISO文件一般都在4.5G以上,一般人用不上里面很多工具,下载回来又浪费时间,现推出ArcGIS10.2.1精简版(里面只包含主程序.Data Interop ...
- TeamViewer12.0.71503(远程控制软件)精简版 单文件企业版介绍
TeamViewer 是一款能在任何防火墙和 NAT 代理的后台用于远程控制,桌面共享和文件传输的简单且快速的解决方案.为了连接到另一台计算机,只需要在两台计算机上同时运行 TeamViewer 即可 ...
- Log4j快速使用精简版
Log4j快速使用精简版 1.导入log4j-1.2.17.jar包 2.在src根目录下创建log4j.properties文件 log4j.rootLogger=INFO, CONSOLE, FI ...
- VMware10.06精简版安装后台运行
VMware10.06精简版安装时会出现一个安装功能选择菜单,里面有一条后台运行必选功能,一般人会跳过条.当你打算在服务器上用vmware时,一定要安装后台运行服务,否则你无法换出正在运行的后台虚拟机 ...
- [异常解决] ubuntu上安装虚拟机遇到的问题(vmware坑了,virtual-box简单安装,在virtual-box中安装精简版win7)
利用周末时间将整个电脑格式化,换成了ubuntu系统- 所谓:扫清屋子再请客! 但是有些软件只在win上有,于是还是考虑装个虚拟机来个——逐步过度策略,一点点地从win上转移到linux上 我的系统是 ...
- 电脑公司最新GHOST WIN7系统32,64位优化精简版下载
系统来自系统妈:http://www.xitongma.com 电脑公司最新GHOST win7系统32位优化精简版V2016年3月 系统概述 电脑公司ghost win7 x86(32位)万能装机版 ...
- TeamViewer12.0.71503(远程控制软件)精简版单文件企业版介绍
TeamViewer 是一款能在任何防火墙和 NAT 代理的后台用于远程控制,桌面共享和文件传输的简单且快速的解决方案.为了连接到另一台计算机,只需要在两台计算机上同时运行 TeamViewer 即可 ...
- centos7精简版(minimal)killall: command not found
centos7精简版(minimal)运行killall命令提示 command not found 是由于没有安装psmisc所致 Psmisc软件包包含三个帮助管理/proc目录的程序. 安装下列 ...
- 小韦XPSP3 V10.0_Ghost精简版
小韦XPSP3 V10.0_Ghost精简版 该版本基于小韦XPSP3 V10.0,用EasySysprep_4.1进行重新封装,最大程度保持原版极度精简的理念.C盘为NTFS格式,安装后C盘只占用2 ...
随机推荐
- Linux curl brew命令详解
命令:curl 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具.它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具 ...
- Mysql调优之使用mysql慢查询日志优化sql语句及表索引
Mysql调优之使用mysql慢查询日志优化sql语句及表索引 一,用慢查询日志找出耗时语句,并优化 # 查看mysql系统慢查询变量配置(能看到慢查询日志是否开启,日志路径等) SHOW VARIA ...
- linux:lamp环境
关于LAMP LAMP搭建 安装php和Apache 先装php,因为安装php有apache的依赖包 yum install php 启动Apache service httpd start 启动成 ...
- OS:MMU
MMU? 全称:memory management unit [内存管理单元] 是: 1.CPU中用来管理虚拟存储器.物理存储器的控制线路 2.同时也负责虚拟地址映射为物理地址 3.以及提供硬件机制的 ...
- 解决线程安全问题的方式三:Lock锁 --- JDK5.0新增
Lock( 锁) 从JDK 5.0开始,Java提供了更强大的线程同步机制--通过显式定义同步锁对象来实现同步.同步锁使用Lock对象充当. java.util.concurrent.locks. ...
- C# LinkedList 删除元素
开发中经常有任务队列的设计,主要用于存储待执行的任务.由于任务来源的多样性,因此有时候需要一颗后悔药,将队列中某些待执行任务删除.此时使用LinkedList比较合适. public LinkedLi ...
- Python 潮流周刊#87:媲美 OpenAI-o1 的开源模型(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- dart中所有的循环详解
List MyList = ['苹果', '栗子', '小苹果']; for (var i = 0; i < MyList.length; i++) { print(MyList[i]); } ...
- java中反射-字节码和类加载器
多态的一个表现 子类类型赋值给父类 Father f1 = New Son() 调用子类方法报错. 调用父类方法OK.这个就是多态 一个对象能用什么方法,并不是取决于 它有什么方法. 而是取决于引用变 ...
- 基于DeepSeek R1 满血版大模型的个人知识库,回答都源自对你专属文件的深度学习。
这是一座专属你的知识宝库,它依托 DeepSeek R1 满血版大模型构建而成.在这里,每一次回答都源自对你专属文件的深度学习,精准匹配你的知识需求,为你输出最贴合文件内容的答案 . 使用 Cherr ...