作者 Mr-zhong

代码改变世界....

一、前言

Fast Framework 基于NET6.0 封装的轻量级 ORM 框架 支持多种数据库 SqlServer Oracle MySql PostgreSql Sqlite

优点: 体积小、可动态切换不同实现类库、原生支持微软特性、流畅API、使用简单、性能高、模型数据绑定采用 委托、强大的表达式解析、支持多种子查询可实现较为复杂查询、源代码可读性强。

缺点:目前仅支持Db Frist Code Frist 后续迭代。

开源地址:https://github.com/China-Mr-zhong/Fast-Framework (唯一)

更多示例:https://www.cnblogs.com/China-Mr-zhong/p/17514567.html

  • 导航查询

    • 示例代码

                      /// <summary>
      /// 类别
      /// </summary>
      public class Category
      {
      /// <summary>
      /// 类别ID
      /// </summary>
      [Key]
      public int CategoryId { get; set; } /// <summary>
      /// 类别名称
      /// </summary>
      public string CategoryName { get; set; } /// <summary>
      /// 产品 Navigate MainName和ChildName 可不显示指定,会自动查找主键匹配或ID为结尾的属性
      /// </summary>
      [Navigate(MainName = nameof(CategoryId), ChildName = nameof(Product.CategoryId))]
      public IEnumerable<Product> Products { get; set; } } var data = db.Query<Category>()
      .Include(i => i.Products)
      .ToList();
    • 执行后Sql

      SELECT Include_A.`CategoryId`,Include_A.`CategoryName`,Include_B.`ProductId`,Include_B.`ProductCode`,Include_B.`ProductName`,Include_B.`DeleteMark`,Include_B.`CreateTime`,Include_B.`ModifyTime`,Include_B.`Custom1`,Include_B.`Custom2`,Include_B.`Custom3`,Include_B.`Custom4`,Include_B.`Custom5`,Include_B.`Custom6`,Include_B.`Custom7`,Include_B.`Custom8`,Include_B.`Custom9`,Include_B.`Custom10`,Include_B.`Custom11`,Include_B.`Custom12` FROM `Category` `Include_A`
      INNER JOIN `Product` `Include_B` ON `Include_A`.`CategoryId` = `Include_B`.`CategoryId`
  • Join子查询

    • 示例代码

                      var subQuery1 = db.Query<Product>().Select(s => new
      {
      s.ProductId,
      s.CategoryId,
      s.ProductCode,
      s.ProductName,
      s.DeleteMark
      });
      var data = db.Query<Category>().InnerJoin(subQuery1, (a, b) => a.CategoryId == b.CategoryId).ToList();
    • 执行后Sql

      SELECT p1.`CategoryId`,p1.`CategoryName`,p2.`ProductId`,p2.`ProductCode`,p2.`ProductName`,p2.`DeleteMark` FROM `Category` `p1`
      INNER JOIN ( SELECT `ProductId` AS `ProductId`,`CategoryId` AS `CategoryId`,`ProductCode` AS `ProductCode`,`ProductName` AS `ProductName`,`DeleteMark` AS `DeleteMark` FROM `Product` ) `p2` ON ( `p1`.`CategoryId` = `p2`.`CategoryId` )
  • From子查询

    • 示例代码

                      var subQuery2 = db.Query<Product>().Select(s=>new
      {
      s.ProductId,
      s.CategoryId,
      s.ProductCode,
      s.ProductName,
      s.DeleteMark
      });
      var data = db.Query(subQuery2).ToList();
    • 执行后Sql

      SELECT * FROM ( SELECT `ProductId` AS `ProductId`,`CategoryId` AS `CategoryId`,`ProductCode` AS `ProductCode`,`ProductName` AS `ProductName`,`DeleteMark` AS `DeleteMark` FROM `Product` ) x
  • Select子查询

    • 示例代码

                      var data = db.Query<Product>().Select(s => new
      {
      CategoryName = db.Query<Category>().Where(w => w.CategoryId == 1).Select(s => s.CategoryName).First()
      }).First();
    • 执行后Sql

      SELECT ( SELECT `p2`.`CategoryName` FROM `Category` `p2`
      WHERE ( `p2`.`CategoryId` = 1 ) Limit 1 ) AS `CategoryName` FROM `Product` `p1` Limit 1
  • Select嵌套查询

    • 示例代码

      var data1 = db.Query<Product>().Select(s => new
      {
      NestedQuery = db.Query<Category>().Where(w => w.CategoryId == s.CategoryId).ToList()
      }).First(); var data2 = db.Query<Product>().Where(w => w.ProductId == 1).Select(s => new
      {
      NestedQuery = db.Query<Category>().Where(w => w.CategoryId == s.CategoryId).ToList()
      }).First();
    • 执行后Sql

      //内部机制主查询有结果才执行嵌套查询,懒加载实现
      
      SELECT 0 AS `fast_args_index_0` FROM `Product` `p1` Limit 1
      
      --------------------------------------------------------------------------
      
      SELECT p2.`CategoryId`,p2.`CategoryName`,p1.`ProductId`,p1.`ProductCode`,p1.`ProductName`,p1.`DeleteMark`,p1.`CreateTime`,p1.`ModifyTime`,p1.`Custom1`,p1.`Custom2`,p1.`Custom3`,p1.`Custom4`,p1.`Custom5`,p1.`Custom6`,p1.`Custom7`,p1.`Custom8`,p1.`Custom9`,p1.`Custom10`,p1.`Custom11`,p1.`Custom12` FROM `Category` `p2`
      RIGHT JOIN `Product` `p1` ON ( `p2`.`CategoryId` = `p1`.`CategoryId` ) SELECT 0 AS `fast_args_index_0` FROM `Product` `p1`
      WHERE ( `p1`.`ProductId` = 1 ) Limit 1
  • Where子查询

    • 示例代码

                      var data = db.Query<Category>().Where(w => w.CategoryId == 1 && db.Query<Product>().Where(w => w.CategoryId == 1).Select(s => 1).Any()).First();//Any支持取反
    • 执行后Sql

      SELECT p1.`CategoryId`,p1.`CategoryName` FROM `Category` `p1`
      WHERE ( ( `p1`.`CategoryId` = 1 ) AND EXISTS ( SELECT 1 FROM `Product` `p2`
      WHERE ( `p2`.`CategoryId` = 1 ) ) ) Limit 1

自研ORM 子查询&嵌套查询的更多相关文章

  1. SQL子查询/嵌套查询

    sql子查询 嵌套SELECT语句 嵌套SELECT语句也叫子查询,一个 SELECT 语句的查询结果能够作为另一个语句的输入值.子查询不但能够出现在Where子句中,也能够出现在from子句中,作为 ...

  2. 关于mysql中的数据查询—嵌套查询

    嵌套查询 一个SELECT  FROM  WHERE语句称为一个查询块. 嵌套查询:将一个查询块嵌套在另一个查询块的WHERE子句或者HAVING短语的条件中的查询. 注:子查询的SELECT语句中不 ...

  3. mongodb多个条件查询in,日期查询,嵌套查询,统计集合总数等常用实例

    1. 多个条件查询in in db.inventory.find( { qty: { $in: [ 5, 15 ] } } ) 2. 日期查询 db.books.find({}) 查询时间大于6-,结 ...

  4. 数据库SQL语言学习--上机练习2(连接查询 嵌套查询)

    上机练习2 1.              启动SQL Server 2008中的 SQL Server Management Studio. 2.              针对下面三张基本表进行操 ...

  5. SQL——嵌套查询与子查询

    前言 sql的嵌套查询可以说是sql语句中比较复杂的一部分,但是掌握好了的话就可以提高查询效率.下面将介绍带in的子查询.带比较运算符的子查询.带any/all的子查询.带exists的子查询以及基于 ...

  6. SQL Server 之 子查询与嵌套查询

    当由where子句指定的搜索条件指向另一张表时,就需要使用子查询或嵌套查询. 1 子查询 子查询是一个嵌套在select.insert.update或delete语句或其他子查询中的查询.任何允许使用 ...

  7. MySQL——优化嵌套查询和分页查询

    优化嵌套查询 嵌套查询(子查询)可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中.嵌套查询写起来简单,也容易理解.但是,有时候可以被更有效率的连接(JOIN ...

  8. SQL连接查询和嵌套查询详解

    连接查询 若一个查询同时涉及两个或两个以上的表,则称之为连接查询.连接查询是数据库中最最要的查询, 包括: 1.等值连接查询 2.自然连接查询 3.非等值连接查询 4.自身连接查询 5.外连接查询 6 ...

  9. 数据库开发基础-SQl Server 主键、外键、子查询(嵌套查询)

    主键 数据库主键是指表中一个列或列的组合,其值能唯一地标识表中的每一行.这样的一列或多列称为表的主键,通过它可强制表的实体完整性.当创建或更改表时可通过定义 PRIMARY KEY约束来创建主键.一个 ...

  10. Oracle子查询(嵌套查询)

    概念: 所谓子查询,即一个select语句中嵌套了另外的一个或者多个select语句 需求:查找和Smith同部门的所有员工的id和last_name 目标: 员工id,last_name from: ...

随机推荐

  1. SpringBoot项目中使用缓存Cache的正确姿势!!!

    前言 缓存可以通过将经常访问的数据存储在内存中,减少底层数据源如数据库的压力,从而有效提高系统的性能和稳定性.我想大家的项目中或多或少都有使用过,我们项目也不例外,但是最近在review公司的代码的时 ...

  2. linux CentOS 7上安装Chrome浏览器

    目录 linux CentOS 7上安装Chrome浏览器 添加Chrome浏览器的官方存储库,使用以下命令: 安装Chrome浏览器: 确认Chrome浏览器是否安装成功: linux CentOS ...

  3. golang 必会之 pprof 监控系列(5) —— cpu 占用率 统计原理

    golang pprof 监控系列(5) -- cpu 占用率 统计原理 大家好,我是蓝胖子. 经过前面的几节对pprof的介绍,对pprof统计的原理算是掌握了七八十了,我们对memory,bloc ...

  4. CefSharp自定义缓存实现

    大家好,我是沙漠尽头的狼. 上文介绍了<C#使用CefSharp内嵌网页-并给出C#与JS的交互示例>,本文介绍CefSharp的缓存实现,先来说说添加缓存的好处: 提高页面加载加速:Ce ...

  5. Lucas定理——定义、证明、实现、运用

    目录 什么是Lucas定理 证明Lucas定理 Lucas定理求解组合数的C++实现 什么是Lucas定理 这是一个有助于分解组合数来求解的定理,适合模数小,数字大的问题. 有质数 \(p\),对于\ ...

  6. #Python assign赋值,新增列操作

  7. vue中让嵌入的iframe完美自适应宽度、高度

    涉及到系统集成的时候,前端我们经常会用到iframe嵌入,但是嵌入的时候经常有不适应的情况,太长或太宽.滚动条... 下面的方法可以做到使嵌入的iframe自适应宽度.高度, 1.嵌入iframe,加 ...

  8. 2023-03-24:音视频mp3和h264混合(muxer)编码为mp4,用go语言编写。

    2023-03-24:音视频mp3和h264混合(muxer)编码为mp4,用go语言编写. 答案2023-03-24: 这是一个使用FFmpeg库将MP3和H.264混合编码为MP4的Go语言程序. ...

  9. 2021-01-07:cdn加速是什么原理?

    福哥答案2021-01-07:[答案来自此链接:](https://www.zhihu.com/question/438234873)CDN(Content Delivery Network):内容分 ...

  10. 2022-04-17:给定一个数组arr,其中的值有可能正、负、0, 给定一个正数k。 返回累加和>=k的所有子数组中,最短的子数组长度。 来自字节跳动。力扣862。

    2022-04-17:给定一个数组arr,其中的值有可能正.负.0, 给定一个正数k. 返回累加和>=k的所有子数组中,最短的子数组长度. 来自字节跳动.力扣862. 答案2022-04-17: ...