【个人博客搭建】(13)SqlSugar仓储实现

前边项目搭建了仓储层。但是还未使用。

这里,我们带来的就是简单的仓储实现》

1、创建Repository类:

 public class Repository<T> : SimpleClient<T> where T : class, new(){public Repository(ISqlSugarClient db){base.Context = db;}/// <summary>/// 扩展方法,自带方法不能满足的时候可以添加新方法/// </summary>/// <returns></returns>public List<T> CommQuery(string json){//base.Context.Queryable<T>().ToList();可以拿到SqlSugarClient 做复杂操作return null;}}

这个也是官方给的一个案例。

可看:仓储定义 - SqlSugar 5x - .NET果糖网 

2、添加简单增删改查:

#region 补充private readonly ISqlSugarClient _db;/// <summary>/// 根据IDs查询数据/// </summary>/// <param name="lstIds"></param>/// <returns></returns>public async Task<List<T>> QueryByIDs(object[] lstIds){return await _db.Queryable<T>().In(lstIds).ToListAsync();}/// <summary>/// 新增实体/// </summary>/// <param name="entity"></param>/// <returns>返回主键ID</returns>public async Task<int> AddByEntity(T entity){var insert = _db.Insertable(entity);return await insert.ExecuteReturnIdentityAsync();}/// <summary>/// 批量新增实体(速度快)/// </summary>/// <param name="listEntitys">实体集合</param>/// <returns>返回自增id集合</returns>public async Task<List<int>> AddByEntitys(List<T> listEntitys){return await _db.Insertable(listEntitys.ToArray()).ExecuteReturnPkListAsync<int>();}/// <summary>/// 更新实体数据/// </summary>/// <param name="entity">实体类</param>/// <returns>ID</returns>public async Task<bool> UpdateByEntity(T entity){var i = await _db.Updateable(entity).ExecuteCommandHasChangeAsync();return i;}/// <summary>/// 批量更新实体数据/// </summary>/// <param name="entitys">实体类集合</param>/// <returns></returns>public async Task<bool> UpdateByEntitys(List<T> entitys){return await _db.Updateable(entitys).ExecuteCommandHasChangeAsync();}/// <summary>/// 删除实体/// </summary>/// <param name="entity">实体类</param>/// <returns></returns>public async Task<bool> DeleteByEntity(T entity){return await _db.Deleteable(entity).ExecuteCommandHasChangeAsync();}/// <summary>/// 删除实体/// </summary>/// <param name="entitys">实体类集合</param>/// <returns></returns>public async Task<bool> DeleteByEntity(List<T> entitys){return await _db.Deleteable(entitys).ExecuteCommandHasChangeAsync();}/// <summary>/// 删除指定ID的数据/// </summary>/// <param name="id">主键ID</param>/// <returns></returns>public async Task<bool> DeleteById(object id){return await _db.Deleteable<T>().In(id).ExecuteCommandHasChangeAsync();}/// <summary>/// 删除指定ID集合的数据(批量删除)/// </summary>/// <param name="ids">主键ID集合</param>/// <returns></returns>public async Task<bool> DeleteByIds(object[] ids){return await _db.Deleteable<T>().In(ids).ExecuteCommandHasChangeAsync();}/// <summary>/// 查询实体全部数据/// </summary>/// <returns>全部数据集合</returns>public async Task<List<T>> QueryAll(){return await _db.Queryable<T>().ToListAsync();}/// <summary>/// 查询实体数据(按条件)/// </summary>/// <param name="where">条件</param>/// <returns>实体数据</returns>public async Task<List<T>> Query(string where){return await _db.Queryable<T>().WhereIF(!string.IsNullOrEmpty(where), where).ToListAsync();}//分页:#endregion

 这里的_db是我新建的一个ISqlSugarClient,在构造函数里边记得赋值哦。

其实他也等于已有的那个base.Context。

个人习惯使用db这样名称的数据访问来源对象

3、使用:

        3.1、注入服务:


builder.Services.AddScoped(typeof(Repository<>));

        3.2、注入构造函数内

private readonly Repository<Users> _usersRep;
public UsersService(Repository<Users> usersRep) 
{_usersRep = usersRep;
}

        3.3、案例:

public async void Test()
{Users user = new Users(){UserName = "张三",PassWord = "123456",PhoneNumber = "",Email = "",UserStatus = UsersEnum_UserStatus.ok,Gender = UsersEnum_Gender.secrecy,OpenId = "",Avatar = "",Admire = "",SubScribe = "",Introduction = "",UserType = UsersEnum_UserType.other,CreateBy = 0,CreateTime = DateTime.Now,UpdateBy = 0,UpdateTime = null,};var i1 = await _usersRep.InsertAsync(user);var i11 = await _usersRep.AddByEntity(user);var i2 = await _usersRep.QueryAll();user.UpdateBy = 1;user.UpdateTime = DateTime.Now;var i3 =await _usersRep.UpdateAsync(user);var i31 = await _usersRep.UpdateByEntity(user);var i4 = await _usersRep.DeleteAsync(user);var i41 = await _usersRep.DeleteByEntity(user);
}

这里简单例举了几个,可以自行研究并补充.......

4、拓展:

        4.1、上边的操作可以根据每一个类/实体去做特殊处理。(不推荐)

        4.2、.....

下一篇:

【个人博客搭建】(14)仓储模式用户注册登录案例-CSDN博客 

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

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

相关文章

中国各银行流动性比例数据集(2000-2022年)

01、数据简介 银行流动性比例是指银行的流动性资产期末余额与流动性负债期末余额之比&#xff0c;用于衡量银行流动性的总体水平。这个比例越高&#xff0c;表明银行偿还短期债务的能力越强&#xff0c;流动性风险越小。 本数据覆盖到城市商业银行、城镇银行、大型商业银行、…

张小泉签约实在智能,用实在Agent打造自动化高

在不少老杭州人的童年记忆里&#xff0c;妈妈裁剪衣服、料理食材、修剪各种物品&#xff0c;用的都是张小泉刀剪。 近日&#xff0c;实在智能与“刀剪第一股”张小泉&#xff08;股票代码&#xff1a;301055.SZ&#xff09;正式达成合作&#xff0c;实在Agent数字员工助力张小…

【工具】-根源上解决VScode打印输出乱码的问题

目录 1 第一步&#xff1a; 改编译命令&#xff0c;保持一致2 第二步&#xff1a; 更改VScode的编码格式-保持一致 1 第一步&#xff1a; 改编译命令&#xff0c;保持一致 看一下你的控制台的编译的命名后缀&#xff0c;有两个关键的参数&#xff0c;如下图&#xff1a; “-f…

不同路径 1 2

class Solution {public int uniquePaths(int m, int n) {int[][] dpnew int[m][n];//记录到每个格子有多少种路径for(int i0;i<m;i) dp[i][0]1;for(int j0;j<n;j) dp[0][j]1;//初始化for(int i1;i<m;i){for(int j1;j<n;j){dp[i][j]dp[i-1][j]dp[i][j-1];}}return …

C++—DAY4

在Complex类的基础上&#xff0c;完成^&#xff0c;<<&#xff0c;>>&#xff0c;~运算符的重载 #include <iostream>using namespace std; class Complex {int rel;int vir; public:Complex(){}Complex(int rel,int vir):rel(rel),vir(vir){}void show(){c…

深度学习中的熵、交叉熵、相对熵(KL散度)、极大释然估计之间的联系与区别

熵的最初来源于热力学。在热力学中&#xff0c;熵代表了系统的无序程度或混乱程度&#xff0c;也可以理解为系统的热力学状态的一种度量。后来被广泛引用于各个领域中&#xff0c;如信息学、统计学、AI等&#xff0c;甚至社会学当中。接下来将大家领略一下深度学习中熵的应用。…

“AI技能,新的职场通行证?揭秘阿里最新职业趋势报告“

随着“五一”劳动节的临近&#xff0c;阿里巴巴发布了一份引人注目的报告——《“AI”职业趋势报告》。这份报告不仅揭示了人工智能&#xff08;AI&#xff09;在各行各业中的关键作用&#xff0c;也预示了一个全新的工作时代正在加速到来。 报告中明确指出&#xff0c;AI的应用…

多路递归的一些算法题

前言 首先我想讲一下&#xff0c;我对多路递归的理解吧&#xff0c;我认为多路递归就是循环中套回调&#xff0c;对于循环有几次就是几叉树&#xff0c;就好比我们常用的二叉树的dfs(node.left) 和 dfs(node.right)等前中后序遍历&#xff0c;也就是for (int i 0; i < 2; …

zabbix6.4告警配置(短信告警和邮件告警),脚本触发

目录 一、前提二、告警配置1.邮件告警脚本配置2.短信告警脚本配置3.zabbix添加报警媒介4.zabbix创建动作4.给用户添加报警媒介 一、前提 已经搭建好zabbix-server 在需要监控的mysql服务器上安装zabbix-agent2 上述安装步骤参考我的上篇文章&#xff1a;通过docker容器安装za…

新时代凌迟:考研

我不喜欢上班&#xff0c;但我很欣赏老板的品味&#xff0c;因为咱们公司竟然还在订阅报纸&#xff0c;而且只有一份&#xff0c;《中国青年报》。 这份报纸我最喜欢看的是“冰点周刊”专栏&#xff0c;因为这个栏目能让读者相信&#xff1a;报纸远远可以超越一天的生命。 昨天…

Windows安装Elasticsearch 7.9.2

1 下载 https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.2-windows-x86_64.zip 2 配置 进入config目录&#xff0c;打开elasticsearch.yml文件&#xff0c;给集群和节点配置名称。 cluster.name: my-es node.name: node-1 3 启动 打开bin目录&am…

CyberData统一元数据服务

CyberData统一元数据服务功能完善&#xff0c;实现了湖仓平台元数据在整个平台的统一管理以及外部数据源元数据的主动发现和多计算引擎间元数据的互通互联。 同时&#xff0c;我们支持跨多元计算场景&#xff0c;以及在元数据基础上的统一数据权限管理和数据湖的自动化优化加速…

【Win】PsPing:深入网络性能测试与故障排查

在维护 Azure 虚拟机的过程中&#xff0c;可能会遇到一些网络连通性的问题。例如&#xff0c;当您尝试从个人 PC 上 ping 虚拟机的公网 IP 地址时&#xff0c;可能会发现出现 “Request time out” 的信息&#xff0c;导致无法 ping 通。这种情况的发生&#xff0c;通常是因为在…

plsql 新建sql窗口 初始化慢的问题

问题描述&#xff1a; 新建sql窗口当sql语句多的情况下初始化很慢。 解决方法&#xff1a; 采用导入表的方式。 具体方式 工具->导入表->sql插入。 使用命令窗口 导入文件&#xff0c;然后点击导入按钮。

Typora for Mac:轻量级Markdown编辑器

Typora for Mac是一款专为Mac用户设计的轻量级Markdown编辑器&#xff0c;它以其简洁的界面和强大的功能&#xff0c;成为了Markdown写作爱好者的首选工具。 Typora for Mac v1.8.10中文激活版下载 Typora的最大特色在于其所见即所得的编辑模式&#xff0c;用户无需关心复杂的M…

为什么 Facebook 不使用 Git?

在编程的世界里&#xff0c;Git 就像水一样常见&#xff0c;以至于我们认为它是创建和管理代码更改的唯一可行的工具。 前 Facebook 员工&#xff0c;2024 年 首先&#xff0c;我为什么关心&#xff1f; 我致力于构建 Graphite&#xff0c;它从根本上受到 Facebook 内部工具的…

Java | Leetcode Java题解之第52题N皇后II

题目&#xff1a; 题解&#xff1a; class Solution {public int totalNQueens(int n) {Set<Integer> columns new HashSet<Integer>();Set<Integer> diagonals1 new HashSet<Integer>();Set<Integer> diagonals2 new HashSet<Integer>…

【Diffusion实战】训练一个diffusion模型生成蝴蝶图像(Pytorch代码详解)

上一篇Diffusion实战是确确实实一步一步走的公式&#xff0c;这回采用一个更方便的库&#xff1a;diffusers&#xff0c;来实现Diffusion模型训练。 Diffusion实战篇&#xff1a;   【Diffusion实战】训练一个diffusion模型生成S曲线&#xff08;Pytorch代码详解&#xff09;…

web题目实操 5(备份文件和关于MD5($pass,true)注入的学习)

1.[ACTF2020 新生赛]BackupFile &#xff08;1&#xff09;打开页面后根据提示是备份文件 &#xff08;2&#xff09;查看源码发现啥都没有 &#xff08;3&#xff09;这里啊直接用工具扫描&#xff0c;可以扫描到一个文件名为&#xff1a;/index.php.bak的文件 &#xff08;…

ArcGIS Pro 和 Python — 分析全球主要城市中心的土地覆盖变化

第一步——设置工作环境 1–0. 地理数据库 在下载任何数据之前,我将创建几个地理数据库,在其中保存和存储所有数据以及我将创建的后续图层。将为我要分析的五个城市中的每一个创建一个地理数据库,并将其命名为: “Phoenix.gdb” “Singapore.gdb” “Berlin.gdb” “B…