ShadowSql之功能简介

ShadowSql包含sql的绝大多数功能

按可执行功能分为Insert、Delete、Update、Select(SingleSelect)、CreateTable、DropTable和TruncateTable

以上功能还包含子功能,有Table、AliasTable、DB、TableView、Column(Field)、Query(SqlQuery)、Cursor、SelectField和SubQuery等

一、Table(表)用于映射数据表

Table可以包含Column,方便使用Column来拼接sql,也可以用来验证sql的合法性,比如不存在的列不能使用,需要抛异常

Table的接口是ITable、默认实现类有SimpleTable、Table及TableSchema

SimpleTable只是表的占位符,不包含列,但不包含可以使用Field拼接sql(篇幅有限.这里不展开)

Table可以包含列,使用Column拼接sql会验证是否存在,当然也可以使用Field绕过验证,这看个人或团队的喜好和标准

对于Insert和Update操作,如果没有预先定义好列,后面操作就要每次手动指定列,就不是很方便

最佳实践是把Table和它的Column定义好做为配置,或注入到IOC里面

TableSchema主要用于CreateTable,CodeFIrst生成表,还有表需要增加Schema限定符

当然还可以自定义Table类型

二、DB(数据库)负责管理Table

接口为IDB,有3个实现类,DB和SimpleDB和DBSchema

DB管理Table

SimpleDB管理SimpleTable

DBSchema管理TableSchema

Table可以独立存在,DB并不是必须的,DB也不参与sql拼写

三、AliasTable(别名表)

AliasTable就是给Table取一个别名

AliasTable很重要,在联表和子查询的时候都需要用到,用来区分不同表的不同字段

还有自联表的情况,必须有别名才会不出错

AliasTable的接口是IAliasTable,默认实现类是TableAlias

当然自定义AliasTable也是不错的选择,在联表查询是香的狠

四、TableView

TableView就是接口ITableView,表示一个表或者查询视图

Table、AliasTable、Query(DataQuery)、Cursor都继承了ITableView

从概念上讲TableView分为6种,分别为Table、AliasTable、MultiTable(及JoinTable)、GroupByTable、GroupByAliasTable、GroupByMulti6种

这6种几乎贯彻了查询的绝大部分过程

Query和SqlQuery分8种(JoinTable和JoinOn特殊处理)

SelectField分这6种

Cursor分这6种

Select和SingleSelect也分这6种

每种特殊处理,以便更好的支持其特殊的情况

五、SqlQuery

SqlQuery通过原生sql和逻辑来查询

Table、AliasTable、MultiTable(及JoinTable)用Where查询

GroupByTable、GroupByAliasTable、GroupByMulti用Having

JoinOn用On查询

如果要嵌套AND和OR是通过调用ToAnd和ToOr来实现

六、Query

Query通过逻辑运算来查询,方法名为And和Or

每个逻辑对象都支持Not方法用来支持逻辑非运算

逻辑非尽量少用,在大部分情况下会有替代方案的

一般逻辑对象是Field+运算符+值(也可以是字段或参数),每个运算符都有一个反运算符,这种情况代替逻辑非应该是更好的选择

七、Cursor

Cursor意思是游标,功能就是分页+OrderBy

where条件内数据量还是很多,有时只需要筛选其中一部分,这时需要移动游标来截图其中一部分

支持Asc、Desc和OrderBy来排序,其中OrderBy是支持原始sql的

Skip和Take就是自动游标的方法,这个Linq是一致的

八、SelectFields

SelectFields用来筛选部分字段,默认*

通过方法Select、Alias和SelectCount来筛选字段

九、Select

用来组装ITableView(Query、Cursor)和SelectFields

一个是行的筛选,另一个是列的筛选

这样就可以生成完成的Select语句了

十、Insert分3种

SingleInsert用来插入单条数据

MultiInsert用来一次性插入多条数据

SelectInsert用来插入Select的结果

十一、Delete分为3种

TableDelete、AliasTableDelete和MultiTableDelete

其中MultiTableDelete含联表

十二、Update分为3种

TableUpdate、AliasTableUpdate和MultiTableUpdate

其中MultiTableUpdate含联表

十三、TableDelete清空表

十四、CreateTable和DropTable生成和删除表

CreateTable和DropTable放在独立的子项目Shadow.DDL里面

是因为大多数项目不需要这些功能,为了尽量精简

以上是ShadowSqlh功能的简介,感兴趣的同学可以去github查看源码。

仓库地址: https://github.com/donetsoftwork/Shadow。

如果大家喜欢请动动您发财的小手手帮忙点一下Star。

相关推荐
xiangji7 小时前
ShadowSql之借Dapper打通ORM最后一公里
orm·dapper·sqlbuilder
xiangji1 天前
正在开发的.net sql拼写神器
数据处理·dapper
凉凉的知识库4 天前
搞懂常见Go ORM系列-Ent框架详解
数据库·go·orm
会功夫的李白11 天前
一个轻量级的 SQLite ORM 工具包
数据库·sqlite·orm
abckingaa20 天前
python开发订单查询功能(flask+orm bee)
python·orm·bee
妖孽白YoonA25 天前
NestJS + DrizzleORM:轻量级、高性能的完美搭配? 🚀
orm·nestjs
凉凉的知识库1 个月前
搞懂常见Go ORM系列-开篇
后端·go·orm
2301_793069821 个月前
Spring Boot +SQL项目优化策略,GraphQL和SQL 区别,Spring JDBC 等原理辨析(万字长文+代码)
java·数据库·spring boot·sql·jdbc·orm
三天不学习2 个月前
【并发控制、更新、版本控制】.NET开源ORM框架 SqlSugar 系列
开源·.net·orm·sqlsugar