ABP框架8——仓储的作用及其基础Demo

一、使用仓储的好处

  • 1.提高CRUD接口复用性
  • 2.解耦业务逻辑(BLL)和增删改查(CRUD),换ORM特别方便,不需要改应用层,直接改仓储层
  • 3.做复杂查询
  • 4.事务支持

二、Demo

public class BookRepository : IBookRepository, ITransientDependency  //接口依赖注入
{private readonly IFreeSql _fsql;public BookRepository(IFreeSql fsql){_fsql = fsql;}/// <summary>/// 获取FreeSql/// </summary>/// <param name="input"></param>/// <returns></returns>public IFreeSql GetFreeSql(){return _fsql;}/// <summary>/// 分页查询:Book/// </summary>/// <param name="input"></param>/// <returns></returns>[HttpPost][Route(nameof(GetBookPageListAsync))]public async Task<IPageList<BookDto>> GetBookPageListAsync(BookSerachInput input){var output = new PageList<BookDto>(new List<BookDto>(), input.PageIndex, input.maxResultCount);if (false){return output;//不符合要求,返回空数据}var fsql = GetFreeSql();//查表var queryList = await fsql.Select<Book>().Where(x => x.TimePoint.Between(input.StartTime, input.EndTime)).WhereIf(input.StationCodes.Any(), x => input.StationCodes.Contains(x.CityCode)).OrderBy(!string.IsNullOrEmpty(input.orderby), input.orderby).Page(input.PageIndex, input.maxResultCount).Count(out var totalCount).ToListAsync();//映射结果var dtoList = _objectMapper.Map<List<Book>, List<BookDto>>(queryList);return new PageList<BookDto>(dtoList, input.PageIndex, input.maxResultCount, totalCount);}/// <summary>/// Book 单一实体 修改/// </summary>public async Task<bool> UpdateBookAsync(BookDto input){var fsql = GetFreeSql();return fsql.Update<BookDto>(input).ExecuteAffrows() != 0;}/// <summary>/// Book 单一实体 保存/// </summary>public async Task<bool> SaveBookAsync(BookDto input){var fsql = GetFreeSql();bool isExist = await fsql.Select<Book>().AnyAsync(x => x.Id == input.Id);//【根据实际修改】根据(联合)主键确定唯一性if (isExist){return await UpdateBookAsync(input);}return await InsertBookAsync(input);}/// <summary>/// Book 单一实体 插入/// </summary>public async Task<bool> InsertBookAsync(BookDto input){var fsql = GetFreeSql();return fsql.Insert(input).ExecuteAffrows() != 0;}/// <summary>/// Book 单一实体 删除/// </summary>public async Task<bool> DeleteBookAsync(BookDto input){var fsql = GetFreeSql();return fsql.Delete<BookDto>(input).ExecuteAffrows() != 0;}/// <summary>/// Book 列表 保存/// </summary>public async Task<bool> SaveBookListAsync(List<BookDto> inputList){bool result = true;var fsql = GetFreeSql();//获取输入主键var inputKeyList = inputList.Select(x => x.Id ).Distinct().ToList();//根据输入主键获取已存在实体var existList = await fsql.Select<Book>().Where(x => inputKeyList.Contains(x.Id)).ToListAsync();//获取已存在实体的主键列表var existKeyList = existList.Select(x => x.Id).Distinct().ToList();// 获取更新列表和插入列表var updateList = inputList.Where(x => existKeyList.Contains(x.Id)).ToList();var insertList = inputList.Where(x => !existKeyList.Contains(x.Id)).ToList();/*联合主键://获取输入主键var inputKeyList = inputList.Select(x => new { x.Id , x.BookName }).Distinct().ToList();//根据输入主键获取已存在实体var existList = await fsql.Select<Book>().Where(x=> inputKeyList.Any(key=>key.Id == x.Id && key.BookName == x.BookName)).ToListAsync();//获取已存在实体的主键列表var existKeyList = existList.Select(x => new { x.Id, x.BookName }).Distinct().ToList();//获取更新列表和插入列表var updateList = inputList.Where(x => existKeyList.Contains(new { x.Id, x.BookName })).ToList();var insertList = inputList.Where(x => !existKeyList.Contains(new { x.Id, x.BookName })).ToList();*/// 使用批量更新和批量插入方法bool updateSuccess = await UpdateBookListAsync(updateList);  // 批量更新bool insertSuccess = await InsertBookListAsync(insertList);  // 批量插入return updateSuccess && insertSuccess; // 返回是否全部成功}/// <summary>/// Book 列表 修改/// </summary>public async Task<bool> UpdateBookListAsync(List<BookDto> input){var fsql = GetFreeSql();return fsql.Update<BookDto>(input).ExecuteAffrows() != 0;}/// <summary>/// Book 列表 插入/// </summary>public async Task<bool> InsertBookListAsync(List<BookDto> input){var fsql = GetFreeSql();return fsql.Insert(input).ExecuteAffrows() != 0;}/// <summary>/// Book 列表 删除/// </summary>public async Task<bool> DeleteBookListAsync(List<BookDto> input){var fsql = GetFreeSql();return fsql.Delete<BookDto>(input).ExecuteAffrows() != 0;}}

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

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

相关文章

毕设中所学

1、交叉引用 在毕业设计论文Word中交叉引用参考文献_交叉引用如何标注[1~6]-CSDN博客 另&#xff1a;将标号或其他文字改为上标的快捷键是CtrlShift。 图的交叉引用一样&#xff0c;修改引用类型即可。 2、ENVI安装 ENVI5.6 安装教程&#xff0c;新手入门&#xff08;超详细…

git 问题解决记录

在用git上传文件到仓库中出现了2个问题 第一个问题&#xff1a; 需要修改git的代理端口与电脑自己的代理服务器设置中的端口和VPN的端口保持一致&#xff0c; 比如我的端口是7897&#xff0c;就设置 git config --global http.proxy http://127.0.0.1:7897 git config --glo…

DATACOM-DHCP-复习-实验

DHCP 概述工作原理DHCP分配机制 配置配置基于全局地址池的DHCP服务器配置DHCP Relay中继验证 实验配置DHCP中继 参考 概述 动态主机配置协议DHCP&#xff08;Dynamic Host Configuration Protocol&#xff09;是一种网络管理协议&#xff0c;用于集中对用户IP地址进行动态管理和…

RK3588+麒麟国产系统+FPGA+AI在电力和轨道交通视觉与采集系统的应用

工业视觉识别系统厂家提供的功能主要包括&#xff1a; 这些厂家通过先进的视觉识别技术&#xff0c;实现图像的采集、处理与分析。系统能够自动化地完成质量检测、物料分拣、设备监控等任务&#xff0c;显著提升生产效率和产品质量。同时&#xff0c;系统具备高度的灵活性和可扩…

物联网控制期末复习

第3章 物联网控制系统的过程通道设计 3.1 模拟量输出通道 3.1.1单模拟量输出通道的构成 计算机控制系统的模拟量输出通道将计算机产生的数字控制信号转换为模拟信号&#xff08;电压或电流&#xff09;作用于执行机构&#xff0c;以实现对被控对象的控制。 多D/A结构&#…

python3中的生成器

一. 简介 前面简单学习了 python3中的迭代器&#xff0c;本文来学习 python3中生成器。 在 Python 中&#xff0c;生成器&#xff08;Generator&#xff09;是一种特殊的迭代器&#xff0c;在 Python 中&#xff0c;生成器&#xff08;Generator&#xff09;是一种特殊的迭代…

数据库运维学习选择

在如今国产化浪潮澎湃的 IT 领域&#xff0c;数据库运维宛如一座充满机遇的宝藏&#xff0c;等待着新人去挖掘。如果你像曾经的我一样&#xff0c;非科班出身、毫无基础&#xff0c;别慌&#xff0c;我以多年奋战在一线的经验&#xff0c;为你照亮前行的路。 一、基础奠基&…

2501d,jingo优化

原文 大家好,我重构和优化了一下jin.go这里: 我去掉了vibe.d依赖,因为它又慢又大,而且我无法与2版本交朋友.当仅运行1000个vibe纤程时,不仅应用崩溃,甚至图形系统驱动也崩溃一次,这需要重启笔记本电脑. 当前,我用小栈大小的本地流(4kb)解决. 我真很期待photon的稳定性,以恢复支…

js的一些处理

1.翻转字符串 let str abcdef str str.split().reverse().join() console.log(str) 因此想到了我之前写的截取字符串获取参数跳转&#xff0c;在写一遍 let str nameJack&age18&gender男 let list str.split(&); let obj {} list.forEach((v)>{ …

vue3 css实现文字输出带光标显示,文字输出完毕,光标消失的效果

Vue实现过程如下&#xff1a; <template><div ><p ref"dom_element" class"typing" :class"{over_fill: record_input_over}"></p></div> </template> <script setup> import {onMounted, ref} from…

node.js之---集群(Cluster)模块

为什么会有集群&#xff08;Cluster&#xff09;模块&#xff1f; 集群&#xff08;Cluster&#xff09;模块的作用 如何使用集群&#xff08;Cluster&#xff09;模块&#xff1f; 为什么会有集群&#xff08;Cluster&#xff09;模块 Node.js 是基于 单线程事件驱动 模型的…

[C++]vector(超详细)

在学习完了string后&#xff0c;我们来学习新的STL容器vector&#xff0c;是真正的属于STL中的一员&#xff0c;vector也是STL的基础容器&#xff0c;英文释义是向量&#xff0c;其实实质上就是顺序表。 在这个部分我们会学习的非常快&#xff0c;第一个原因是由于vector的设计…

2025年度全国会计专业技术资格考试 (甘肃考区)报名公告

2025年度全国会计专业技术资格考试 &#xff08;甘肃考区&#xff09;报名公告 按照财政部、人力资源和社会保障部统一安排&#xff0c;2025年度全国会计专业技术初级、中级、高级资格考试报名即将开始&#xff0c;现将甘肃考区有关事项通知如下&#xff1a; 一、报名条件 …

算法 class 005 (对数器C语言实现)

对数器的概念&#xff1a; 用来测试你的算法是否正确。 怎么做呢&#xff1f; 1&#xff1a;比如&#xff0c;写个冒泡排序&#xff0c;作为对比的对象 2&#xff1a;生成一个随机数 数组&#xff0c;用来测试 3&#xff1a;用冒泡排序和你想要验证的那个排序算法&#xff0c;同…

风力涡轮机缺陷检测数据集,91.4%准确识别率,18912张图片,支持yolo,PASICAL VOC XML,COCO JSON格式的标注

风力涡轮机缺陷检测数据集&#xff0c;91.4&#xff05;准确识别率&#xff0c;18912张图片&#xff0c;支持yolo&#xff0c;PASICAL VOC XML&#xff0c;COCO JSON格式的标注 数据集下载&#xff1a; &#xff59;&#xff4f;&#xff4c;&#xff4f; &#xff56;&#…

termux配置nginx+php

只能以默认用户u0_axx运行,修改用户会报错An error occurred.或者file no found 安装nginx pkg install nginx安装php-fpm pkg install nginx修改nginx配置文件, nano ../usr/etc/nginx/nginx.conf#端口必须设置在1024以上(1024以下需要root,但php-fpm不能以root用户运行,n…

机器人对物体重定向操作的发展简述

物体重定向操作的发展简述 前言1、手内重定向和外部重定向2、重定向原语3、重定向状态转换网络4、连续任意姿态的重定向5、利用其他环境约束重定向总结Reference 前言 对于一些特殊的任务&#xff08;如装配和打包&#xff09;&#xff0c;对物体放置的位姿由明确的要求&#…

k8s基础(1)—Kubernetes-Pod

一、Pod简介 Pod是Kubernetes&#xff08;k8s&#xff09;系统中可以创建和管理的最小单元&#xff0c;是资源对象模型中由用户创建或部署的最小资源对象模型‌。Pod是由一个或多个容器组成的&#xff0c;这些容器共享存储和网络资源&#xff0c;可以看作是一个逻辑的主机‌。…

NLP 中文拼写检测纠正论文-07-NLPTEA-2020中文语法错误诊断共享任务概述

拼写纠正系列 NLP 中文拼写检测实现思路 NLP 中文拼写检测纠正算法整理 NLP 英文拼写算法&#xff0c;如果提升 100W 倍的性能&#xff1f; NLP 中文拼写检测纠正 Paper java 实现中英文拼写检查和错误纠正&#xff1f;可我只会写 CRUD 啊&#xff01; 一个提升英文单词拼…

根据 el-dialog 的高度动态计算 el-table 的高度

根据 el-dialog 的高度动态计算 el-table 的高度&#xff0c;可以使用 Vue 的 ref 和生命周期钩子来实现。以下是一个实现方案&#xff1a; 首先&#xff0c;给 el-dialog 和 el-table 添加 ref&#xff1a; <el-dialogv-model"testInstrumentDialogVisible"tit…