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。

相关推荐
触底反弹6 天前
🚀 Next.js 全栈项目数据库连接实战:Drizzle ORM + Supabase 从零到跑通
postgresql·orm·next.js
姚杨6 天前
聊了三年 DDD,代码里全是贫血模型:老陈一句话点破,落地先过这几关
后端·orm
Darling噜啦啦7 天前
从零搭建单词管理系统:Next.js + Supabase + Drizzle ORM 全栈实战
数据库·orm·next.js
不好听6137 天前
ORM:让你不用再手写SQL语句
orm
柒和远方7 天前
V077:Next.js 后台的认证与权限防线:首个超级管理员的事务锁初始化、会话令牌哈希,与四道管理员保护规则
orm·next.js
__zRainy__9 天前
Node系列 · ORM:mysql 驱动程序
数据库·后端·mysql·node.js·orm
在水一缸1 个月前
深入浅出:Node.js 下一代 ORM 架构设计与实战解析
数据库·微服务·云原生·node.js·orm·架构设计
鱼听禅2 个月前
C#学习笔记-Entity Framework Core基础操作学习
c#·orm·ef core
jump_jump2 个月前
Kysely 源码解剖:类型安全 SQL 如何走到 AST
node.js·orm·源码阅读