自研ORM 完美支持 Exists查询 非常灵活
示例代码
Case 1 Code
var data = db.Query<Product>()
.Where(w => db.Query<Product>().WhereIF(!string.IsNullOrWhiteSpace("测试"), a => a.ProductId == 1).Select(s => 1).Any())
.Select(s => new
{
s.ProductId,
s.ProductCode
}).ToList();
Case 1 Sql
SELECT `p1`.`ProductId` AS `ProductId`,`p1`.`ProductCode` AS `ProductCode` FROM `Product` `p1`
WHERE EXISTS ( SELECT 1 FROM `Product` `p2`
WHERE ( `p2`.`ProductId` = 1 ) )
Case 2 Code (如需主表作为条件 需使用Case1 写法)
var existsQuery = db.Query<Product>().WhereIF(!string.IsNullOrWhiteSpace("测试"), a => a.ProductId == 1).Select(s => 1);
var data = db.Query<Product>()
.Where(w => existsQuery.Any())
.Select(s => new
{
s.ProductId,
s.ProductCode
}).ToList();
Case 2 Sql
SELECT `p1`.`ProductId` AS `ProductId`,`p1`.`ProductCode` AS `ProductCode` FROM `Product` `p1`
WHERE EXISTS ( SELECT 1 FROM `Product` `p2`
WHERE ( `p2`.`ProductId` = 1 ) )
Case 3 Code(真实项目写法的伪代码,可自由搭配,基本上可以媲美手写sql)
var queryBuilder = db.Query<Product>()
.Where(a => SqlFunc.Operation(a.CreateTime.ToString("yyyy-MM-dd"), ">=", DateTime.Now.ToString("yyyy-MM-dd")))
.Where(a => db.Query<Product>().Where(b => a.ProductName.Contains("主表") || b.Custom1.Contains("子表")).WhereIF(!string.IsNullOrWhiteSpace("测试"), a => a.ProductId == 1).Select(s => 1).Any())
.Select(s => new
{
s.ProductId,
s.ProductCode
}).QueryBuilder;
Case 3 Print Result
SELECT `p1`.`ProductId` AS `ProductId`,`p1`.`ProductCode` AS `ProductCode` FROM `Product` `p1`
WHERE DATE_FORMAT( `p1`.`CreateTime`,'%Y-%m-%d' ) >= DATE_FORMAT( @Now_1,'%Y-%m-%d' ) AND EXISTS ( SELECT 1 FROM `Product` `p2`
WHERE ( `p1`.`ProductName` LIKE CONCAT( '%','主表','%' ) OR `p2`.`Custom1` LIKE CONCAT( '%','子表','%' ) ) AND ( `p2`.`ProductId` = 1 ) )
参数名称:Now_1 参数值:2023-06-07 18:35:14
3.亮点功能
1.别名自动编排和联表查询一样
2.支持Query 所有非返回结果集方法,结尾需调用Any方法以及重载方法,非常灵活 !!!
开源项目地址:https://github.com/China-Mr-zhong/Fast-Framework (唯一)
其它查询示例
Select查询 (Case When)
var data = db.Query<Product>().Select(s => new
{
CaseTest1 = SqlFunc.Case(s.Custom1).When("1").Then("xx1").When("2").Then("xx2").Else("xx3").End(),
CaseTest2 = SqlFunc.CaseWhen<string>(s.Custom1 == "1").Then("xx1").When(s.Custom1 == "2").Then("xx2").Else("xx3").End()
}).ToList();
分组查询
var data = db.Query<Product>().GroupBy(s => new
{
s.ProductId,
s.ProductName
}).ToList();
分组聚合查询
var sql = db.Query<Order>().InnerJoin<OrderDetail>((a, b) => a.OrderId == b.OrderId).GroupBy((a, b) => new
{
a.OrderCode
}).Select((a, b) => new
{
a.OrderCode,
Sum_Qty = SqlFunc.Sum(b.Qty)//支持嵌套
}).ToList();
排序查询
var data = db.Query<Product>().OrderBy(s => new
{
s.CreateTime
}).ToList();
//这是多个字段排序使用方法 还有其它重载方法
Having查询
var data = db.Query<Product>().GroupBy(s => new
{
s.ProductId,
s.ProductName
}).Having(s => SqlFunc.Count(s.ProductId) > 1).ToList();
//必须先使用GroupBy方法 懂得都懂
自研ORM 完美支持 Exists查询 非常灵活的更多相关文章
- 自研ORM框架 实现类似EF Core Include 拆分查询 支持自定义条件、排序、选择
Baozi, I'm Mr.Zhong I like to brush TikTok, I know that anchors like to call it that, haha!Recently, ...
- 数据库开发-Django ORM的单表查询
数据库开发-Django ORM的单表查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查询集 1>.查询集相关概述 查询会返回结果的集,它是django.db.mod ...
- SqlSugar ORM已经支持读写分离
目前只有MYSQL版 3.5.2.9 支持,其库版本12月3号更新该功能 用例讲解 using (var db = new SqlSugarClient("主连接字符串", &qu ...
- 数据库:django ORM如何处理N+1查询
数据库N+1查询是个常见的问题,简单描述场景如下 基本场景 class Category(models.Model): name = models.CharField(max_length=30) c ...
- 开涛spring3(8.1) - 对ORM的支持 之 8.1 概述
8.1 概述 8.1.1 ORM框架 ORM全称对象关系映射(Object/Relation Mapping),指将Java对象状态自动映射到关系数据库中的数据上,从而提供透明化的持久化支持,即把 ...
- Retrofit 2.0 超能实践(一),okHttp完美支持Https传输
http: //blog.csdn.net/sk719887916/article/details/51597816 Tamic首发 前阵子看到圈子里Retrofit 2.0,RxJava(Andro ...
- Retrofit 2.0 超能实践,完美支持Https传输
http://blog.csdn.NET/sk719887916/article/details/51597816 前阵子看到圈子里Retrofit 2.0,RxJava(Android), OkHt ...
- mysql update不支持子查询更新
先看示例: SELECT uin,account,password,create_user_uin_tree FROM sys_user 结果: 表中的create_user_uin_tree标识该条 ...
- Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终端打印SQL语句,脚本调试)
Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终 ...
- 数据库开发-Django ORM的多对多查询
数据库开发-Django ORM的多对多查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.联合主键问题 CREATE TABLE `employees` ( `emp_no` ...
随机推荐
- Java/Kotlin 使用Redis模拟发送验证码
原文地址: Java/Kotlin 使用Redis模拟发送邮件验证码 - Stars-One的杂货小窝 Java中常用语连接Redis的库有lettuce和jredis,一般是推荐lettuce,其具 ...
- JVM加载中初始化时机?什么时候不会进行初始化?
初始化的过程是给静态变量赋予指定值以及执行静态代码块的过程. 当遇到new,getstatic,putstatic,invokestatic指令时要进行初始化,也就是new实例化对象,调用静态变量以及 ...
- C++中va_list, va_start, va_arg, va_end的基本用法
关于va_list, va_start, va_arg, va_end 由于在C语言中没有函数重载,解决不定数目函数参数问题变得比较麻烦,即使采用C++,如果参数个数不能确定,也很难采用函数重载.对这 ...
- spring-boot-starter-parent not found
项目开始的springboot版本为2.6.6 <parent> <groupId>org.springframework.boot</groupId> <a ...
- Idea快捷键——查找源码
双击shift 输入要查找源码类 相当于查 java_jdk_chm Ctrl+F12 :浏览类
- 从零开始配置深度学习环境:CUDA+Anaconda+Pytorch+TensorFlow
本文适用于电脑有GPU(显卡)的同学,没有的话直接安装cpu版是简单的.CUDA是系统调用GPU所必须的,所以教程从安装CUDA开始. CUDA安装 CUDA是加速深度学习计算的工具,诞生于NVIDI ...
- 香,一套逻辑轻松且智能解决PyQt中控件数值验证的问题
在PyQt开发中,时常需要对控件的值进行校验,如需要校验QCheckBox是否被选中,QLabel是否校验值是否为空等等.在复杂的业务场景下,这类控件如果数量很多,逐个校验就显得麻烦,需要一一获得控件 ...
- Redis性能瓶颈揭秘:如何优化大key问题?
1. 什么是Redis大key问题 Redis大key问题指的是某个key对应的value值所占的内存空间比较大,导致Redis的性能下降.内存不足.数据不均衡以及主从同步延迟等问题. 到底多大的数据 ...
- MySQL中的Join 的算法(NLJ、BNL、BKA)
本文已收录至Github,推荐阅读 Java随想录 微信公众号:Java随想录 目录 摘要 什么是Join Index Nested-Loop Join Block Nested-Loop Join ...
- selenium配置远程测试环境
开头 因为测试的时候需要不断打开浏览器,这样效率感觉不高,于是想着能不能开启一个浏览器,然后通过代码直接链接来调试就好了. 前提 要先安装好selenium 和 会查看配置自己的google版本和路径 ...