正在开发的.net sql拼写神器
我正在开发的一个.net sql拼写工具,当然也可以算是ORM
该工具的作用就是帮忙码农拼写sql,对标开源项目SqlKata。该工具最适合搭配Dapper使用,所以附带了一个Dapper扩展。当然直接搭配ado.net也是可以的。
sql操作用的最多也是最复杂的是查询,本工具包含两套查询模式:sql模式和逻辑模式。
一、先介绍sql查询模式
1、支持按原生sql进行查询,示例如下:
var query = db.From("Users")
.ToSqlQuery()
.Where("Id=@Id", "Status=@Status");
2、支持按逻辑查询
var query = new UserTable()
.ToSqlQuery()
.Where(Id.EqualValue(100));
3、支持GroupBy
var table = db.From("Users");
var groupBy = table.ToSqlQuery()
.ColumnEqualValue("Age", 20)
.GroupBy("CityId")
.Having(g => g.Aggregate("MAX", "Level").GreaterValue(9));
4、支持联表
var employees = db.From("Employees");
var departments = db.From("Departments"); var joinOn = employees.SqlJoin(departments)
.On(static (t1, t2) => t1.Field("DepartmentId").Equal(t2.Field("Id")));
var joinTable = joinOn.Root
.Where(join => join.From("t2").Field("Manager").EqualValue("CEO"));
二、逻辑模式
以上功能逻辑模式都支持,逻辑模式是按And、Or来查询的。没有where、having、on等关键字
逻辑模式一般执行速度更快、内存消耗更少
1、单表查询
var query = db.From("Users")
.ToQuery()
.And(_id.Equal())
.And(_status.Equal("Status"));
var query = db.From("Users")
.ToOrQuery()
.Or(_id.Equal())
.Or(_status.Equal("Status"));
2、GroupBy
var groupBy = table.ToQuery()
.And(Age.EqualValue(20))
.GroupBy("CityId")
.And(Level.Max().GreaterValue(9));
3、联表
CommentTable c = new("c");
PostTable p = new("p");
var joinOn = c.Join(p)
.And(c.PostId.Equal(p.Id));
var query = joinOn.Root
.And(c.Pick.Equal())
.And(p.Author.Equal())
篇幅优先,还有很多功能没法在这里一一列举,欢迎大家去探索。
三、两种模式与SqlKata对比速度都更快,消耗内存也更少
更多信息可以到github上查询,或下载代码自己测试一下
四、源码托管在github上
仓库地址: https://github.com/donetsoftwork/Shadow
如果大家喜欢请动动您发财的小手手帮忙点一下Star。
有什么建议也可以反馈给我,该项目还在开发中,还可能会增加更多有趣的功能。
而且我还计划为这个工具再开发一个精简版本,以求更好的性能。
正在开发的.net sql拼写神器的更多相关文章
- iOS开发数据库篇—SQL
iOS开发数据库篇—SQL 一.SQL语句 如果要在程序运行过程中操作数据库中的数据,那得先学会使用SQL语句 1.什么是SQL SQL(structured query language):结构化查 ...
- iOS开发数据库篇—SQL代码应用示例
iOS开发数据库篇—SQL代码应用示例 一.使用代码的方式批量添加(导入)数据到数据库中 1.执行SQL语句在数据库中添加一条信息 插入一条数据的sql语句: 点击run执行语句之后,刷新数据 2.在 ...
- 使用Java注解开发自动生成SQL
使用注解开发的好处就是减少配置文件的使用.在实际过程中,随着项目越来越复杂,功能越来越多,会产生非常多的配置文件.但是,当配置文件过多,实际维护过程中产生的问题就不容易定位,这样就会徒劳的增加工作量. ...
- 功能齐全、效率一流的免费开源数据库导入导出工具(c#开发,支持SQL server、SQLite、ACCESS三种数据库),每月借此处理数据5G以上
软件名:DataPie 功能:支持SQL server.SQLite.ACCESS数据库的导入.导出.存储过程调用,支持EXCEL2007.EXCEL2003.ACCESS2007. CSV文件导入数 ...
- AgileEAS.NET SOA中间件平台/敏捷软件开发平台 and SQL详解
AgileEAS.NET SOA中间件平台/敏捷软件开发平台 http://www.smarteas.net/ SQL详解: http://www.w3school.com.cn/sql/func_d ...
- 开发反模式 - SQL注入
一.目标:编写SQL动态查询 SQL常常和程序代码一起使用.我们通常所说的SQL动态查询,是指将程序中的变量和基本SQL语句拼接成一个完整的查询语句. string sql = SELECT * FR ...
- 【转】Android开发之数据库SQL
android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作. 一.android内的数据库的基础知识介绍 1.用了什么数据库 android中采用的数据库是SQLi ...
- spring boot整合mybatis基于注解开发以及动态sql的使用
让我们回忆一下上篇博客中mybatis是怎样发挥它的作用的,主要是三类文件,第一mapper接口,第二xml文件,第三全局配置文件(application.properties),而今天我们就是来简化 ...
- 慕课网笔记之oracle开发利器-PL/SQL基础
实例1--if语句 /* 慕课网Oracle数据库开发必备之PL/SQL_2-3 判断用户从键盘输入的数字 1.如何使用if语句 2.接收一个键盘的输入(字符串) */ set serveroutpu ...
- PL/SQL开发中动态SQL的使用方法
一般的PL/SQL程序设计中,在DML和事务控制的语句中可以直接使用SQL,但是DDL语句及系统控制语句却不能在PL/SQL中直接使用,要想实现在PL/SQL中使用DDL语句及系统控制语句,可以通过使 ...
随机推荐
- 深度学习基础理论————DeepSpeed
DeepSpeed原理 DeepSpeed 是由微软开发的一种深度学习优化库,专为高性能训练和推理而设计,尤其适用于大规模深度学习模型(如 GPT 系列.BERT 等).它通过一系列技术和优化策略,帮 ...
- uwp IProgress<T>进度通知。
主要是利用 Pp_ProgressChanged 报告进度: private void BtnDownload_Click(object sender, RoutedEventArgs e) { va ...
- 后端开发之chrome开发者模式-copy
1. 场景描述 java开发前后端分离模式越来越流行,后端人员可以直接使用swagger进行接口调试(前后端分离之Swagger2),但是调试的时候,需要设置入参,假如该模块不是软件老王开发的,接别人 ...
- ubuntu mysql 通过ip登录指南
详细步骤: 1. 安装mysql 首先,在ubuntu上安装mysql,打开终端,并执行以下命令: 1 sudo apt-get update 2 sudo apt-get install mysql ...
- Vite构建项目记录
背景 微信推送了一些公众号文章,所 vite 已经跟新到 v6 版本了,于是构建一个 vite 项目看下啥变化 过程 直接打开 https://vite.dev/ 官网,切换问中文语言,找到此处 ht ...
- solon-flow 你好世界!
solon-flow 是一个基础级的流处理引擎(可用于业务规则.决策处理.计算编排.流程审批等......).提供有 "开放式" 驱动定制支持,像 jdbc 有 mysql 或 p ...
- arthas进行java应用不停服务情况下的class文件热部署更新
我们在工作的过程中会遇到java应用已经部署或升级投入使用,发现某个单元文件有bug需要修正,但是客户的应用目前不能停止,而且不能因为一个非致命的bug来进行整个平台的一次升级.我们需要进行单文件的更 ...
- 玩转云端 | 天翼云边缘安全加速平台AccessOne实用窍门之多款产品管理难?一站式平台管理全hold住!
随着数字化转型深入推进,企业信息化建设成效显著,同时其所面临的安全与性能挑战也日趋复杂,既要确保业务系统的安全性,同时也要提供快速.流畅的用户体验,以提升用户满意度和业务竞争力. 在传统的解决方案中, ...
- .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
昨天线上有几个进程因为 StackOverFlowException 导致进程 Crash 了,但是 TCP 请求还是可以连接,具体可不可以连接一个出现StackOverFlowException的微 ...
- Luogu P10838 『FLA - I』庭中有奇树 题解 [ 绿 ] [ 二分 ] [ 双指针 ] [ 树的遍历 ]
庭中有奇树:很多算法揉在一起的好题. 转化题意 因为要封锁 \(m\) 条路径,根据贪心思想,他一定会封锁最短的 \(m\) 条路径.所以我们能走的最短传送路径就是最短的第 \(m+1\) 条路径. ...