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 ...
随机推荐
- KafKa动态分组ID
背景说明:做这个的原因主要是因为懒,KafKa监听没有独立项目出去,由于KafKa没有组内广播模式,这就造成了一个问题:项目多处启动的时候,就只有一个地方能接收信息.这个时候就要手懂修改分组ID了. ...
- lvm相关命令及/etc/fstab开机挂载
名词解释: PV: 物理卷(physicalvolume)物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区.磁盘等)比 ...
- 性能测试-Oceanus 测试FLink mysql到Iceberg性能
一.任务依赖信息 1.mysql测试库信息 地址:127.0.0.1.gomysql_bdg_test 库:bdg_test 表:order_info1 2.iceberg库 hive地址:thrif ...
- Luogu P4287 SHOI2011 双倍回文 题解 [ 紫 ] [ manacher ]
双倍回文:回文子串结论的经典应用. 结论 先放本题最关键的结论:一个字符串本质不同的回文子串最多只有 \(n\) 个. 考虑如何证明: 假设我们一个一个地在当前字符串(黑色部分)的结尾加入字符(红色部 ...
- 解锁 DeepSeek 的高效秘籍:技术人员的进阶技巧
DeepSeek 作为一款强大的代码搜索引擎,能够帮助开发者快速定位代码.解决疑难问题,甚至学习前沿技术.但想要真正释放其潜力,必须掌握以下核心技巧.本文将通过重点标注,直击高效使用 DeepSeek ...
- [SDOI2009] 晨跑 题解
每个点拆成入点和出点. 发现每个点.每条边都只能经过一次,所以所有边的容量都是 \(1\). #include<bits/stdc++.h> #define ll long long us ...
- 2分钟学会 DeepSeek API,竟然比官方更好用!
大家好,我是程序员鱼皮.最近 DeepSeek AI 太火了,效果也很强,但致命问题是 不稳定, 经常给我返回 服务器繁忙,请稍后再试,甚至让我怀疑自己被杀熟了. 也有网友说,第一次使用成功率很高,第 ...
- -bash: ./run.sh: /bin/bash^M: bad interpreter: No such file or directory 报错解决方法
- SpringBoot中使用Netty实现TCP通讯,服务器主动向客户端发送数据
简述: Springboot项目的web服务后台,web服务运行在9100端口. 后台使用netty实现了TCP服务,运行在8000端口. 启动截图如下: pom依赖 <dependency ...
- thymeleaf 使用th:onclick传递参数问题:
使用方法:注意:传递参数时如果参数是数字这样写没有问题,但是如果参数是字符串onclick的方法将无法接收到参数并报错,所以参数是字符串时要加单引号.如上图.