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之精简版拆分的更多相关文章

  1. Linux上oracle精简版客户端快速部署

    RHEL6 + Oracle 11g客户端快速部署 需求:只是用到客户端的sqlplus, sqlldr功能. 方案:用精简版实现客户端的快速部署 1.上传oracle精简版客户端到服务器/tmp目录 ...

  2. ArcGIS10.2.1精简版、ArcGIS_Desktop10_Tutorial、破解文件等下载地址

    原版ArcGIS for Desktop的ISO文件一般都在4.5G以上,一般人用不上里面很多工具,下载回来又浪费时间,现推出ArcGIS10.2.1精简版(里面只包含主程序.Data Interop ...

  3. TeamViewer12.0.71503(远程控制软件)精简版 单文件企业版介绍

    TeamViewer 是一款能在任何防火墙和 NAT 代理的后台用于远程控制,桌面共享和文件传输的简单且快速的解决方案.为了连接到另一台计算机,只需要在两台计算机上同时运行 TeamViewer 即可 ...

  4. Log4j快速使用精简版

    Log4j快速使用精简版 1.导入log4j-1.2.17.jar包 2.在src根目录下创建log4j.properties文件 log4j.rootLogger=INFO, CONSOLE, FI ...

  5. VMware10.06精简版安装后台运行

    VMware10.06精简版安装时会出现一个安装功能选择菜单,里面有一条后台运行必选功能,一般人会跳过条.当你打算在服务器上用vmware时,一定要安装后台运行服务,否则你无法换出正在运行的后台虚拟机 ...

  6. [异常解决] ubuntu上安装虚拟机遇到的问题(vmware坑了,virtual-box简单安装,在virtual-box中安装精简版win7)

    利用周末时间将整个电脑格式化,换成了ubuntu系统- 所谓:扫清屋子再请客! 但是有些软件只在win上有,于是还是考虑装个虚拟机来个——逐步过度策略,一点点地从win上转移到linux上 我的系统是 ...

  7. 电脑公司最新GHOST WIN7系统32,64位优化精简版下载

    系统来自系统妈:http://www.xitongma.com 电脑公司最新GHOST win7系统32位优化精简版V2016年3月 系统概述 电脑公司ghost win7 x86(32位)万能装机版 ...

  8. TeamViewer12.0.71503(远程控制软件)精简版单文件企业版介绍

    TeamViewer 是一款能在任何防火墙和 NAT 代理的后台用于远程控制,桌面共享和文件传输的简单且快速的解决方案.为了连接到另一台计算机,只需要在两台计算机上同时运行 TeamViewer 即可 ...

  9. centos7精简版(minimal)killall: command not found

    centos7精简版(minimal)运行killall命令提示 command not found 是由于没有安装psmisc所致 Psmisc软件包包含三个帮助管理/proc目录的程序. 安装下列 ...

  10. 小韦XPSP3 V10.0_Ghost精简版

    小韦XPSP3 V10.0_Ghost精简版 该版本基于小韦XPSP3 V10.0,用EasySysprep_4.1进行重新封装,最大程度保持原版极度精简的理念.C盘为NTFS格式,安装后C盘只占用2 ...

随机推荐

  1. Linux curl brew命令详解

    命令:curl 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具.它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具 ...

  2. Mysql调优之使用mysql慢查询日志优化sql语句及表索引

    Mysql调优之使用mysql慢查询日志优化sql语句及表索引 一,用慢查询日志找出耗时语句,并优化 # 查看mysql系统慢查询变量配置(能看到慢查询日志是否开启,日志路径等) SHOW VARIA ...

  3. linux:lamp环境

    关于LAMP LAMP搭建 安装php和Apache 先装php,因为安装php有apache的依赖包 yum install php 启动Apache service httpd start 启动成 ...

  4. OS:MMU

    MMU? 全称:memory management unit [内存管理单元] 是: 1.CPU中用来管理虚拟存储器.物理存储器的控制线路 2.同时也负责虚拟地址映射为物理地址 3.以及提供硬件机制的 ...

  5. 解决线程安全问题的方式三:Lock锁 --- JDK5.0新增

    Lock( 锁) 从JDK 5.0开始,Java提供了更强大的线程同步机制--通过显式定义同步锁对象来实现同步.同步锁使用Lock对象充当. java.util.concurrent.locks. ...

  6. C# LinkedList 删除元素

    开发中经常有任务队列的设计,主要用于存储待执行的任务.由于任务来源的多样性,因此有时候需要一颗后悔药,将队列中某些待执行任务删除.此时使用LinkedList比较合适. public LinkedLi ...

  7. Python 潮流周刊#87:媲美 OpenAI-o1 的开源模型(摘要)

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...

  8. dart中所有的循环详解

    List MyList = ['苹果', '栗子', '小苹果']; for (var i = 0; i < MyList.length; i++) { print(MyList[i]); } ...

  9. java中反射-字节码和类加载器

    多态的一个表现 子类类型赋值给父类 Father f1 = New Son() 调用子类方法报错. 调用父类方法OK.这个就是多态 一个对象能用什么方法,并不是取决于 它有什么方法. 而是取决于引用变 ...

  10. 基于DeepSeek R1 满血版大模型的个人知识库,回答都源自对你专属文件的深度学习。

    这是一座专属你的知识宝库,它依托 DeepSeek R1 满血版大模型构建而成.在这里,每一次回答都源自对你专属文件的深度学习,精准匹配你的知识需求,为你输出最贴合文件内容的答案 . 使用 Cherr ...