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。

相关推荐
沛沛老爹11 天前
Python Django全功能框架开发秘籍
python·django·orm·web开发·模板引擎·项目部署·表单处理
掉头发的王富贵16 天前
【JOOQ】同事凭什么说它是世界上最好用的ORM框架
后端·mybatis·orm
o0向阳而生0o20 天前
68、.NET Entity Framework(EF)
.net·orm·ef
xiangji24 天前
.net 实现 CQRS 的的一个设想
orm·sqlbuilder
却尘1 个月前
当全世界都在用 Rust 重写一切时,Prisma 却选择了反方向
前端·数据库·orm
喵个咪1 个月前
开箱即用的GO后台管理系统 Kratos Admin - 代码生成工具集
微服务·orm·protobuf
xiangji1 个月前
ShadowSql.net之正确使用方式
orm·dapper·可扩展·sqlbuilder·面向接口
MyikJ1 个月前
Java求职面试:从Spring到微服务的技术挑战
java·数据库·spring boot·spring cloud·微服务·orm·面试技巧
Jaising6661 个月前
Mybatis Plus 多租户实现思路分析
spring boot·mybatis·orm
xiangji1 个月前
ShadowSql之表达式树
orm·sqlbuilder