ShadowSql之功能简介
ShadowSql包含sql的绝大多数功能
按可执行功能分为Insert、Delete、Update、Select(SingleSelect)、CreateTable、DropTable和TruncateTable
以上功能还包含子功能,有Table、AliasTable、DB、TableView、Column(Field)、Query(SqlQuery)、Logic、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种几乎贯彻了查询的绝大部分过程
DQuery和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。
ShadowSql之功能简介的更多相关文章
- DYN-B201 Dynamics CRM 云生产力解决方案与功能简介
DYN-B201 Dynamics CRM 云生产力解决方案与功能简介 讲师:王健.林松涛Dynamics CRM 云产品正式落地中国,CRM 与 Azure.O365 深度整合无缝集成,带来无与伦比 ...
- (视频) 《快速创建网站》 2.3 WordPress初始化和功能简介
本文是<快速创建网站>系列的第4篇,如果你还没有看过之前的内容,建议你点击以下目录中的章节先阅读其他内容再回到本文. 访问本系列目录,请点击:http://devopshub.cn/tag ...
- SharePoint 2013 "通知我"功能简介
功能简介 "通知我"主要是在列表或者文档库里面的项目,有添加/删除/修改等操作,发送邮件通知设置的用户的功能:可以针对列表或者文档库设置通知,也可以针对单一项目设置通知功能,是Sh ...
- Beginning SDL 2.0(1) SDL功能简介
原文链接为 http://wiki.libsdl.org/Introduction. 由于近期整理音视频可视化的技术,发现好久不更新的SDL发布了2.0版本,以前也没有过于关注,这里准备尝试下.了解S ...
- HelloX操作系统网络功能简介及使用和开发指南
HelloX网络功能简介及使用和开发指南 HelloX网络功能简介 作为物联网操作系统,网络功能是必备的核心功能之一.按照规划,HelloX实现了两个不同类型的TCP/IP协议栈,一个面向资源受限的嵌 ...
- 部分GDAL工具功能简介
主要转自http://blog.csdn.net/liminlu0314?viewmode=contents 部分GDAL工具功能简介 gdalinfo.exe 显示GDAL支持的各种栅格文件的信息. ...
- 全国天气预报信息数据 API 功能简介与代码调用实战视频
此文章对开放数据接口 API 之「全国天气预报信息数据 API」进行了功能介绍.使用场景介绍以及调用方法的说明,供用户在使用数据接口时参考之用,并对实战开发进行了视频演示. 1. 产品功能 接口开放了 ...
- Hadoop生态圈-Ambari控制台功能简介
Hadoop生态圈-Ambari控制台功能简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在经历一系列安装过程之后(部署过HDP后我终于发现为什么大家喜欢用它了,部署比CDH简 ...
- Redis安装和主要功能简介
Redis安装和主要功能简介 Redis(https://redis.io/), 是一个内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 安装Redis 我很少在开发机中直接装各种数 ...
- 鸟哥的私房菜:Bash shell(一)-Bash shell功能简介
Bash shell系列里,由变量谈起,先讲到环境变量的功能与修改的问题, 然后会继续提到历史指令的运用.接下来,就会谈一下『数据流重导向』这个重要概念, 最后就是管线命令的利用! 一 Bash s ...
随机推荐
- CF div2 994 (A~E)
VP赛时三题,自我感觉发挥不错,唯一不满意的地方在于D题完全没有思路. A 答案最多为2,因为最坏情况即为先将整个区间合并为一个数,若这个数不是0,则再将这个数变为0. 所以3种情况分类讨论即可: 全 ...
- 系统提示msvcp120.dll丢失如何解决
最近有位win7系统用户反映,自己安装完游戏开始玩的时候,系统却提示:示msvcp120.dll丢失,这导致了游戏无法正常运行,这让用户很是苦恼,不知道电脑如何解决,为此非常苦恼,那么win7系统提示 ...
- typedef的最新理解
1.typedef的常规用法 typedef unsigned int UNIT; UINT b; 需要注意的地方有下面几点: ①define 前面替代后面, typedef后面替代前面,这个不要记 ...
- 【转载】Geojson常用工具,收藏备用
收集了网上几个比较好用的网站,收藏备用 1.Geojson数据下载器:http://datav.aliyun.com/tools/atlas/#&lat=33.54139466898275&a ...
- 自定义快捷命令程序(VC++加批处理)
一 概述 在看<从小工到专家-程序员修炼之道>时,看到建议使用Shell,很有感触.在很多时候,通过键盘操作,比鼠标的确会块很多,如果能用好shell命令(或批处理命令) ,的确能节省 ...
- Slate文档编辑器-Node节点与Path路径映射
Slate文档编辑器-Node节点与Path路径映射 在之前我们聊到了slate中的Decorator装饰器实现,装饰器可以为我们方便地在编辑器渲染调度时处理range的渲染,这在实现搜索替换.代码高 ...
- Kotlin:【标准库函数】apply(配置函数)、let、run函数
(调用apply会返回接受者对象,最终file对象被返回,apply函数起到配置函数的作用) 组合使用实践: guestName不为空时: guestName为空时: 不使用let的写法 run函数: ...
- Flu PG walkthrough Intermediate
nmap ┌──(root㉿kali)-[/home/ftpuserr] └─# nmap -p- -A 192.168.192.41 Starting Nmap 7.94SVN ( https:// ...
- 深入解析 Spring AI 系列:解析请求参数处理
大家在使用Spring AI项目开发Agent时,可能会发现,尽管外层的接口设计和调用逻辑比较统一,但实际上每个第三方接口在实现时都会有一些微妙的差异.这些差异可能体现在请求参数的构造.数据格式的处理 ...
- C# LinkedList 删除元素
开发中经常有任务队列的设计,主要用于存储待执行的任务.由于任务来源的多样性,因此有时候需要一颗后悔药,将队列中某些待执行任务删除.此时使用LinkedList比较合适. public LinkedLi ...