遗落的世界 發表於 2025-4-3 11:02:00

ShadowSql.net之功能简介

<p>ShadowSql包含sql的绝大多数功能</p>
<p>按可执行功能分为Insert、Delete、Update、Select(SingleSelect)、CreateTable、DropTable和TruncateTable</p>
<p>以上功能还包含子功能,有Table、AliasTable、DB、TableView、Column(Field)、Query(SqlQuery)、Cursor、SelectField和SubQuery等</p>
<p>&nbsp;</p>
<p>一、Table(表)用于映射数据表</p>
<p>Table可以包含Column,方便使用Column来拼接sql,也可以用来验证sql的合法性,比如不存在的列不能使用,需要抛异常</p>
<p>Table的接口是ITable、默认实现类有SimpleTable、Table及TableSchema</p>
<p>SimpleTable只是表的占位符,不包含列,但不包含可以使用Field拼接sql(篇幅有限.这里不展开)</p>
<p>Table可以包含列,使用Column拼接sql会验证是否存在,当然也可以使用Field绕过验证,这看个人或团队的喜好和标准</p>
<p>对于Insert和Update操作,如果没有预先定义好列,后面操作就要每次手动指定列,就不是很方便</p>
<p>最佳实践是把Table和它的Column定义好做为配置,或注入到IOC里面</p>
<p>TableSchema主要用于CreateTable,CodeFirst生成表,还有表需要增加Schema限定符</p>
<p>当然还可以自定义Table类型</p>
<p>&nbsp;</p>
<p>二、DB(数据库)负责管理Table</p>
<p>接口为IDB,有3个实现类,DB和SimpleDB和DBSchema</p>
<p>DB管理Table</p>
<p>SimpleDB管理SimpleTable</p>
<p>DBSchema管理TableSchema</p>
<p>Table可以独立存在,DB并不是必须的,DB也不参与sql拼写</p>
<p>&nbsp;</p>
<p>三、AliasTable(别名表)</p>
<p>AliasTable就是给Table取一个别名</p>
<p>AliasTable很重要,在联表和子查询的时候都需要用到,用来区分不同表的不同字段</p>
<p>还有自联表的情况,必须有别名才会不出错</p>
<p>AliasTable的接口是IAliasTable,默认实现类是TableAlias</p>
<p>当然自定义AliasTable也是不错的选择,在联表查询是香的狠</p>
<p>&nbsp;</p>
<p>四、TableView</p>
<p>TableView就是接口ITableView,表示一个表或者查询视图</p>
<p>Table、AliasTable、Query(DataQuery)、Cursor都继承了ITableView</p>
<p>从概念上讲TableView分为6种,分别为Table、AliasTable、MultiTable(及JoinTable)、GroupByTable、GroupByAliasTable、GroupByMulti6种</p>
<p>这6种几乎贯彻了查询的绝大部分过程</p>
<p>Query和SqlQuery分8种(JoinTable和JoinOn特殊处理)</p>
<p>SelectField分这6种</p>
<p>Cursor分这6种</p>
<p>Select和SingleSelect也分这6种</p>
<p>每种特殊处理,以便更好的支持其特殊的情况</p>
<p>&nbsp;</p>
<p>五、SqlQuery</p>
<p>SqlQuery通过原生sql和逻辑来查询</p>
<p>Table、AliasTable、MultiTable(及JoinTable)用Where查询</p>
<p>GroupByTable、GroupByAliasTable、GroupByMulti用Having</p>
<p>JoinOn用On查询</p>
<p>如果要嵌套AND和OR是通过调用ToAnd和ToOr来实现</p>
<p>&nbsp;</p>
<p>六、Query</p>
<p>Query通过逻辑运算来查询,方法名为And和Or</p>
<p>每个逻辑对象都支持Not方法用来支持逻辑非运算</p>
<p>逻辑非尽量少用,在大部分情况下会有替代方案的</p>
<p>一般逻辑对象是Field+运算符+值(也可以是字段或参数),每个运算符都有一个反运算符,这种情况代替逻辑非应该是更好的选择</p>
<p>&nbsp;</p>
<p>七、Cursor</p>
<p>Cursor意思是游标,功能就是分页+OrderBy</p>
<p>where条件内数据量还是很多,有时只需要筛选其中一部分,这时需要移动游标来截取其中一部分</p>
<p>支持Asc、Desc和OrderBy来排序,其中OrderBy是支持原始sql的</p>
<p>Skip和Take就是移动游标的方法,这个Linq是一致的</p>
<p>&nbsp;</p>
<p>八、SelectFields</p>
<p>SelectFields用来筛选部分字段,默认*</p>
<p>通过方法Select、Alias和SelectCount来筛选字段</p>
<p>&nbsp;</p>
<p>九、Select</p>
<p>用来组装ITableView(Query、Cursor)和SelectFields</p>
<p>一个是行的筛选,另一个是列的筛选</p>
<p>这样就可以生成完整的Select语句了</p>
<p>&nbsp;</p>
<p>十、Insert分3种</p>
<p>SingleInsert用来插入单条数据</p>
<p>MultiInsert用来一次性插入多条数据</p>
<p>SelectInsert用来插入Select的结果</p>
<p>&nbsp;</p>
<p>十一、Delete分为3种</p>
<p>TableDelete、AliasTableDelete和MultiTableDelete</p>
<p>其中MultiTableDelete含联表</p>
<p>&nbsp;</p>
<p>十二、Update分为3种</p>
<p>TableUpdate、AliasTableUpdate和MultiTableUpdate</p>
<p>其中MultiTableUpdate含联表</p>
<p>&nbsp;</p>
<p>十三、TruncateTable清空表</p>
<p>&nbsp;</p>
<p>十四、CreateTable和DropTable生成和删除表</p>
<p>CreateTable和DropTable放在独立的子项目Shadow.DDL里面</p>
<p>是因为大多数项目不需要这些功能,为了尽量精简</p>
<p>&nbsp;</p>
<p>以上是ShadowSql功能的简介,感兴趣的同学可以去github查看源码。</p>
<p>仓库地址: https://github.com/donetsoftwork/Shadow。<br>如果大家喜欢请动动您发财的小手手帮忙点一下Star。</p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/xiangji/p/18807075
頁: [1]
查看完整版本: ShadowSql.net之功能简介