ShadowSql.net之精简版拆分
<p>ShadowSql拆分为精简版和易用版,项目和nuget包同步拆分</p><p>ShadowSql项目拆分为ShadowSql.Core和ShadowSql</p>
<p>Dapper.Shadow项目拆分为Dapper.Shadow.Core和Dapper.Shadow</p>
<p>Dapper.Shadow.Core依赖ShadowSql.Core</p>
<p>Dapper.Shadow依赖ShadowSql</p>
<p>精简版的目标是够用、直接,基于接口编程</p>
<p>易用版的目标是好用、易用,基于泛型编程</p>
<p>易用版依赖精简版,是在精简版上扩展而来</p>
<p>下面举几个例子对比一下</p>
<p>一、读取一张表的例子</p>
<p>1. 精简版代码如下:</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)">var</span> table = SimpleDB.From(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Students</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> count =<span style="color: rgba(0, 0, 0, 1)"> table.Count(Executor);<br></span><span style="color: rgba(0, 0, 255, 1)"> var</span> <span style="color: rgba(0, 0, 255, 1)">select</span> = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> TableSelect(table);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> students = <span style="color: rgba(0, 0, 255, 1)">select</span>.Get<Student>(Executor);</pre>
</div>
<p>2.易用版代码如下:</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)">var</span> <span style="color: rgba(0, 0, 255, 1)">select</span> = Executor.From(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Students</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
.ToDapperSelect();
</span><span style="color: rgba(0, 0, 255, 1)">var</span> count = <span style="color: rgba(0, 0, 255, 1)">select</span><span style="color: rgba(0, 0, 0, 1)">.Count();<br></span><span style="color: rgba(0, 0, 255, 1)"> var</span> students = <span style="color: rgba(0, 0, 255, 1)">select</span>.Get<Student>();</pre>
</div>
<p>在《ShadowSql之借Dapper打造高性能ORM及百变魔法》中有介绍Dapper执行的3种方式</p>
<p>精简版只支持其中1种,易用版3种都支持</p>
<p> </p>
<p>二、分页查询数据的例子</p>
<p>1. 精简版代码如下:</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)">var</span> table = <span style="color: rgba(0, 0, 255, 1)">new</span> StudentTable(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Students</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> query = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> TableSqlQuery(table)
.Where(table.Age.GreaterEqualValue(</span><span style="color: rgba(128, 0, 128, 1)">9</span><span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 0, 255, 1)">var</span> count =<span style="color: rgba(0, 0, 0, 1)"> query.Count(Executor);<br></span><span style="color: rgba(0, 0, 255, 1)"> var</span> cursor = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> TableCursor(query)
.Desc(table.Id)
.Skip(</span><span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">)
.Take(</span><span style="color: rgba(128, 0, 128, 1)">10</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> <span style="color: rgba(0, 0, 255, 1)">select</span> = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> TableSelect(cursor);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> students = <span style="color: rgba(0, 0, 255, 1)">select</span>.Get<Student>(Executor);</pre>
</div>
<p>2.易用版代码如下:</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)">var</span> query = <span style="color: rgba(0, 0, 255, 1)">new</span> StudentTable(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Students</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
.ToSqlQuery()
.Where(table </span>=> table.Age.GreaterEqualValue(<span style="color: rgba(128, 0, 128, 1)">9</span><span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 0, 255, 1)">var</span> count =<span style="color: rgba(0, 0, 0, 1)"> query.Count(Executor);<br></span><span style="color: rgba(0, 0, 255, 1)"> var</span> students =<span style="color: rgba(0, 0, 0, 1)"> query.ToCursor()
.Desc(table </span>=><span style="color: rgba(0, 0, 0, 1)"> table.Id)
.Skip(</span><span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">)
.Take(</span><span style="color: rgba(128, 0, 128, 1)">10</span><span style="color: rgba(0, 0, 0, 1)">)
.ToSelect()
.Get</span><Student>(Executor);</pre>
</div>
<p>分页查询例子中两者的区别更明显,在易用版中如果不求count,整个过程可以全部连写,非常连贯</p>
<p>精简版基本每个组件要定义一个变量</p>
<p>易用版除了通过导航属性(扩展方法)串连各个组件外,还提供高阶函数(函数类型参数供主函数内调用)来进行个性化的查询</p>
<p>当然,易用版用到泛型可能会多出一丁点的cpu和内存开销,这些可以忽略不计的</p>
<p>另外这个例子也体现了本工具和SqlKata的设计思路的重大区别</p>
<p>SqlKata的Query是个大对象,把所有可能用到的组件都包含在内;</p>
<p>ShadowSql是按需分配,只有需要的时候才链接上需要的组件</p>
<p>这也是SqlKata比ShadowSql执行更慢,内存消耗更多的原因之一</p>
<p> </p>
<p>精简版和易用版各有优缺点,萝卜白菜各有所爱,两种我都喜欢。</p>
<p>如果写小工具,就偏爱易用版。如果做微服务精简版很适合。</p>
<p> </p>
<p>nuget包如下:</p>
<p><img src="https://img2024.cnblogs.com/blog/248830/202504/248830-20250412005438848-34674509.png" alt="" loading="lazy"></p>
<p> 欢迎大家尝试,有什么问题给我留言,我会尽力满足大家的需求</p>
<p> </p>
<p>源码托管地址: https://github.com/donetsoftwork/Shadow,也欢迎大家直接查看源码。<br>如果大家喜欢请动动您发财的小手手帮忙点一下Star。</p><br><br>
来源:https://www.cnblogs.com/xiangji/p/18821612
頁:
[1]