【配置查询】.NET开源 ORM 框架 SqlSugar 系列

 .NET开源 ORM 框架 SqlSugar 系列

  1. 【开篇】.NET开源 ORM 框架 SqlSugar 系列
  2. 【入门必看】.NET开源 ORM 框架 SqlSugar 系列
  3. 【实体配置】.NET开源 ORM 框架 SqlSugar 系列
  4. 【Db First】.NET开源 ORM 框架 SqlSugar 系列
  5. 【Code First】.NET开源 ORM 框架 SqlSugar 系列
  6. 【数据事务】.NET开源 ORM 框架 SqlSugar 系列
  7. 【连接池】.NET开源 ORM 框架 SqlSugar 系列
  8. 【查询目录】.NET开源 ORM 框架 SqlSugar 系列
  9. 【查询基础】.NET开源 ORM 框架 SqlSugar 系列
  10. 【排序用法】.NET开源 ORM 框架 SqlSugar 系列
  11. 【分组去重】.NET开源 ORM 框架 SqlSugar 系列
  12. 【联表查询】.NET开源 ORM 框架 SqlSugar 系列
  13. 【导航查询】.NET开源 ORM 框架 SqlSugar 系列
  14. 【子查询】.NET开源 ORM 框架 SqlSugar 系列
  15. 【嵌套查询】.NET开源 ORM 框架 SqlSugar 系列
  16. 【配置查询】.NET开源 ORM 框架 SqlSugar 系列
  17. 【并集查询】.NET开源 ORM 框架 SqlSugar 系列

 


一、抛砖引玉

1、🚫实际开发中数据库大量用到 多表查询 ,只为一个字段就进行 联表 。🤣

2、🚫字典表 联表查询 ,字典表我相信大家都全用到,他们可以方便的存储性别、学历、岗位等 一串数据 并进行TypeId进行区分😂

二、应对策略

2.1 字典导航

通过导航查询我们也可以实现配置查询:

优点:支持多层级 一对一 

💀不足:  像字典表那样 没办法 动态配置 , 依赖主键 导航配置

public class DataMain 
{//表属性   public int Id{get;set;}public string Name{get;set;}public string SexCode { get; set; }public  string Province { get; set; }//导航[SqlSugar.Navigate(NavigateType.OneToOne,nameof(SexCode),nameof(DataDictionary1.Code),"type='sex'")]public DataDictionary1 SexInfo { get; set; }[SqlSugar.Navigate(NavigateType.OneToOne, nameof(Province), nameof(DataDictionary1.Code), "type='province'")]public DataDictionary1 ProvinceInfo { get; set; }
}var list=db.Queryable<DataMain>().Includes(x => x.SexInfo).Includes(x => x.ProvinceInfo).ToList();//返回导航属性//联表导航
var list2 = db.Queryable<DataMain>().Where(x=>x.SexInfo.Name=="男")//也可以在Select用.ToList();

2.2 传统配置查询

2.2.1 创建测试数据

创建一个字典实体

public class DataDictionary
{public string Code { get; set; }public string Name { get; set; }public string Type { get; set; }
}

创建字典表并向里面插入测试数据

var db = GetInstance();List<DataDictionary> datas = new List<DataDictionary>();datas.Add(new DataDictionary() { Code="1", Name="男",Type="sex" });datas.Add(new DataDictionary() { Code = "2", Name = "女", Type = "sex" });datas.Add(new DataDictionary() { Code = "1", Name = "南通市", Type = "city" });datas.Add(new DataDictionary() { Code = "2", Name = "苏州市", Type = "city" });datas.Add(new DataDictionary() { Code = "1", Name = "江苏省", Type = "province" });datas.Add(new DataDictionary() { Code = "2", Name = "湖南省", Type = "province" });db.Insertable(datas).ExecuteCommand();//这样就能把数据插进数据库了

再建一个Person表

public class Person
{//数据库字段[SqlSugar.SugarColumn(IsPrimaryKey =true,IsIdentity =true)]public int Id { get; set; }public string Name { get; set; }public int SexId { get; set; }public int CityId { get; set; }public int ProvinceId { get; set; }//非数据库字段[SqlSugar.SugarColumn(IsIgnore =true)]public string SexName { get; set; }[SqlSugar.SugarColumn(IsIgnore = true)]public string CityName { get; set; }[SqlSugar.SugarColumn(IsIgnore = true)]public string ProvinceName { get; set; }
} 
2.2.2 传统实现缺点

如果我们要将 Person 中的非数据字段查询出来那么我们就需要写有 2种 实现方式

 🔸连表或者子查询 (缺点 写起来很浪费时间)

🔸 将字典存到内存,通过内存赋值 (缺点 字典表 超过1000 条以上 性能很差  ,并且 不能排序 ,或者 LIKE

2.2.3 使用配置查询

配置字典表

     //保证程序启动后只执行一次lock(单例对象) { var types= db.Queryable<DataDictionary>().Select(it => it.Type).Distinct().ToList();foreach (var type in types){db.ConfigQuery.SetTable<DataDictionary>(it =>it.Code,it =>it.Name,type,it =>it.Type==type);}}//像姓别是01 02 学历也是01 02 这种只能按这种循环方式,需要加个Type区分唯一//如果其中Code都是唯一值可以按1.4中的用法使用 ,一行代码就可以配置不需要循环//如果你认为麻烦你也可以把这个配置扔到程序启动中完成

配置完我们查询就会很方便了

   var res=db.Queryable<Person>().Select(it => new Person(){Id=it.Id.SelectAll(),  // Oracle 注意:单表查询要设置别名SelectAll("别名")SexName=it.SexId.GetConfigValue<DataDictionary>("sex"),ProvinceName = it.ProvinceId.GetConfigValue<DataDictionary>("province"),CityName = it.CityId.GetConfigValue<DataDictionary>("city"),}).ToList();//生成的Sql//select  *,//          (select name from  DataDictionary  where type='sex' where t.code=sexid) as sexname,//          (select name from  DataDictionary  where type='city'where t.code=cityid) as cityname,   //          (select name from  DataDictionary  where type='province' where t.code=provinceid) as provincename // from Person t      //支持写在Where或者Orderby 
2.2.4 简单联表查询配置

//配置Order 
if (!db.ConfigQuery.Any()) //保证只配置一次不能更新,该配置是全局静态存储
{db.ConfigQuery.SetTable<Order>(it => it.Id, it => it.Name);//多个配置可以一起写在下面
}
//使用
var list3 = db.Queryable<OrderItem>().Select(it => new OrderItem
{ItemId = it.ItemId.SelectAll(), // Oracle 注意:单表查询要设置别名SelectAll("别名")OrderName = it.OrderId.GetConfigValue<Order>() //查询的时候直接用
}).ToList();
//select *,
//     (select name from order where id= t.orderid) as ordername 
//from orderitem t

🎯总结:配置表查询的方式可以大大降低重复联表问题,并且配置好后基本就不要写JOIN了。

2.2.5 参数介绍

SetTable<T> 总共4个参数 ,T 代表哪个实体表

🔸参数 1、主键或者关联字段

🔸参数 2、显示的文本

🔸参数 3、唯一标识(可不填) 当一个T对应多个查询的时候需要指定一个唯一标识

🔸参数 4、查询条件(可不填)

💦万丈高楼平地起,做开发想要技术精进,必须要有扎实的基础功底。基础SQL查询语法一定要牢记于心,才能应对后面更为复杂的形势。

  .NET开源 ORM 框架 SqlSugar 系列

  1. 【开篇】.NET开源 ORM 框架 SqlSugar 系列
  2. 【入门必看】.NET开源 ORM 框架 SqlSugar 系列
  3. 【实体配置】.NET开源 ORM 框架 SqlSugar 系列
  4. 【Db First】.NET开源 ORM 框架 SqlSugar 系列
  5. 【Code First】.NET开源 ORM 框架 SqlSugar 系列
  6. 【数据事务】.NET开源 ORM 框架 SqlSugar 系列
  7. 【连接池】.NET开源 ORM 框架 SqlSugar 系列
  8. 【查询目录】.NET开源 ORM 框架 SqlSugar 系列
  9. 【查询基础】.NET开源 ORM 框架 SqlSugar 系列
  10. 【排序用法】.NET开源 ORM 框架 SqlSugar 系列
  11. 【分组去重】.NET开源 ORM 框架 SqlSugar 系列
  12. 【联表查询】.NET开源 ORM 框架 SqlSugar 系列
  13. 【导航查询】.NET开源 ORM 框架 SqlSugar 系列
  14. 【子查询】.NET开源 ORM 框架 SqlSugar 系列
  15. 【嵌套查询】.NET开源 ORM 框架 SqlSugar 系列
  16. 【配置查询】.NET开源 ORM 框架 SqlSugar 系列
  17. 【并集查询】.NET开源 ORM 框架 SqlSugar 系列

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/486455.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT模型/视图结构:ListModel与TableModel

简介 模型/视图&#xff08;model/view&#xff09;结构是进行数据存储和界面展示的一种编程结构。此种方式将数据的存储与显示进行了解耦&#xff0c;视图组件显示模型中的数据&#xff0c;在视图组件里修改的数据会被自动保存到模型里。模型的数据来源可以是内存中的字符串列…

Linux系统 —— 进程系列 - 进程的概念,PCB与PID和fork

目录 1. 进程的基本概念与基本操作 1.1 总结&#xff1a;什么才是进程 2. 描述进程-PCB&#xff08;process control block&#xff09; 2.1 task_ struct 2.2 task_ struct内容分类 2.3 组织进程 3. PID 获取当前进程PID - getpid 获取父进程PID - getppid 如何查看…

模型训练数据-MinerU一款Pdf转Markdown软件

模型训练数据-MinerU一款Pdf转Markdown软件-说明 简介&#xff1a; MinerU是什么 MinerU是上海人工智能实验室OpenDataLab团队推出的开源智能数据提取工具&#xff0c;专注于复杂PDF文档的高效解析与提取。MinerU能将包含图片、公式、表格等元素的多模态PDF文档转化为易于分析…

第32天:安全开发-JavaEE应用Servlet路由技术JDBCMybatis数据库生命周期

时间轴&#xff1a; 32天主要学习内容&#xff1a; 1、JavaEE-HTTP-Servlet技术 2、JavaEE-数据库-JDBC&Mybatis java技术使用历史&#xff08;2023 &#xff09;&#xff1a; JavaEE-HTTP-Servlet&路由&周期: java学习范围&#xff1a; 3、Java: 功能:数据…

LSTM-CNN-BP-RF-SVM五模型咖喱融合策略混合预测模型

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 LSTM-CNN-BP-RF-SVM五模型咖喱融合策略混合预测模型 Matlab代码注释清晰。 程序设计 完整程序和数据获取方式&#xff1a;私信博主回复LSTM-CNN-BP-RF-SVM五模型咖喱融合策略混合预测模型&#xff08;Matlab&#…

D91【python 接口自动化学习】- pytest基础用法

day91 pytest的setup&#xff0c;setdown详解&#xff08;三&#xff09; 学习日期&#xff1a;20241207 学习目标&#xff1a;pytest基础用法 -- pytest的setup&#xff0c;setdown详解&#xff08;三&#xff09; 学习笔记&#xff1a; setup、teardown详解&#xff08;三…

Spring事务的一道面试题

每次聊起Spring事务&#xff0c;好像很熟悉&#xff0c;又好像很陌生。本篇通过一道面试题和一些实践&#xff0c;来拆解几个Spring事务的常见坑点。 原理 Spring事务的原理是&#xff1a;通过AOP切面的方式实现的&#xff0c;也就是通过代理模式去实现事务增强。 具体过程是&a…

【无标题】建议用坚果云直接同步zotero,其他方法已经过时,容易出现bug

created: 2024-12-06T16:07:45 (UTC 08:00) tags: [] source: https://zotero-chinese.com/user-guide/sync author: 数据与文件的同步 | Zotero 中文社区 Excerpt Zotero 中文社区&#xff0c;Zotero 中文维护小组&#xff0c;Zotero 插件&#xff0c;Zotero 中文 CSL 样式 数…

室联人形机器人:家政服务任务结构化、技术要点、深入应用FPGA的控制系统框架设计(整合版)

目录&#xff1a; 0 引言 1 人形机器人对室内家政服务任务的结构化 1.1人形机器人在室内家政服务中的比较优势 1.1.1 人形机器人拟人性的7个维度 1.1.2 拟人性在室内家政服务工作中的比较优势 1.1.3 潜在的重要用户&#xff1a;宠物爱好者 1.2 居所室内环境的特征与结构…

基于stm23的智慧宿舍系统 (DAY10)_小程序

好久没记录开发进度了&#xff0c;今天小程序差不多开发完了&#xff0c;UI这块算是比较常见了&#xff0c;主要功能是能连接onenet查看设备上传的数据&#xff0c;同时也能对设备进行一些控制下面是几个主要的函数&#xff0c;功能比较简单 wx.request({url: ${apiBaseUrl}/t…

ruoyi-nbcio为安全起见actuator为仅暴露health端点

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; h…

Vant UI +Golang(gin) 上传文件

前端基本用法&#xff1a;点击查看 实现代码&#xff1a; const afterRead (file) > {console.log(file);//set content-type to multipart/form-dataconst formData new FormData();formData.append("file", file.file);request.POST("/api/v1/users/up…

鸿蒙分享(一):添加模块,修改app名称图标

码仓库&#xff1a;https://gitee.com/linguanzhong/share_harmonyos 鸿蒙api:12 新建公共模块common 在entry的oh-package.json5添加dependencies&#xff0c;引入common模块 "dependencies": {"common": "file:../common" } 修改app名称&…

图像处理网络中的模型水印

论文信息&#xff1a;Jie Zhang、Han Fang、Weiming Zhang、Wenbo Zhou、Hao Cui、Hao Cui、Nenghai Yu&#xff1a;Model Watermarking for Image Processing Networks 本文首次提出了图像处理网络中深度水印问题&#xff0c;将知识产权问题引入图像处理模型 提出了第一个深…

C# Decimal

文章目录 前言1. Decimal 的基本特性2. 基本用法示例3. 特殊值与转换4. 数学运算示例5. 精度处理示例6. 比较操作示例7. 货币计算示例8. Decimal 的保留小数位数9. 处理 Decimal 的溢出和下溢10. 避免浮点数计算误差总结 前言 decimal 是 C# 中一种用于表示高精度十进制数的关键…

网络安全协议基本问题

Http和Https协议的端口号&#xff1a; Http&#xff1a;80 Https&#xff1a;443 网络监听&#xff1a; 网络监听是一种监视网络状态、数据流程以及网络上信息传输的工具&#xff0c;它可以将网络界面设定成监听模式&#xff0c;并且可以截获网络上所传输的信息。但是网络监…

贪心算法part05

文章参考来源代码随想录 (programmercarl.com) 56. 合并区间 本题和前几题类似&#xff0c;都是判断上一个元素的右边界与当前元素的左边界大小关系 但是需要注意是&#xff1a;本题需要更新结果数组元素的右边界&#xff0c;因此比较的是数组最后一个元素右边界与当前元素左…

【Spring篇】初始Spring MVC框架之Spring MVC入门程序编写

&#x1f9f8;安清h&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;【计算机网络】【Mybatis篇】【Spring篇】 &#x1f6a6;作者简介&#xff1a;一个有趣爱睡觉的intp&#xff0c;期待和更多人分享自己所学知识的真诚大学生。 目录 &#x1f3af;Spring MVC概述 …

深度学习图像增强介绍

目录 一、引言二、常用数据增广方法三、图像变换类3.1 AutoAugment3.2 RandAugment 四、图像裁剪类4.1 Cutout4.2 RandomErasing4.3 HideAndSeek 五、图像混叠5.1 Mixup5.2 Cutmix 六、结论 一、引言 在图像分类任务中&#xff0c;图像数据的增广是一种常用的正则化方法&#…

Python办公—DataMatrix二维条码制作

目录 专栏导读1、库的介绍2、库的安装3、核心代码4、完整代码总结专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注 👍 该系列文章专栏:请点击——>Python办公自动化专…