系列目录

一.  创建项目并集成swagger

  1.1 创建

  1.2 完善

二. 搭建项目整体架构

三. 集成轻量级ORM框架——SqlSugar

  3.1 搭建环境

  3.2 实战篇:利用SqlSugar快速实现CRUD

  3.3 生成实体类

四. 集成JWT授权验证

五. 实现CORS跨域

六. 集成泛型仓储


源码下载:https://github.com/WangRui321/RayPI_V2.0

注:以下项目里的Service层其实是DAL层的意思,以前都习惯写DAL的,经园友回复提醒,Service一般指业务逻辑层,用Service确实不准确,下个版本更新会更正一下~

1. 根

之前在集成SqlSugar的时候,我们用Student类作为例子,写了5个基础的接口:获取集合、获取单个、添加、修改、删除,也就是常说的仓储的CRUD了。

Service层的代码是这样的:

而且我们规定,以后每个实体类都必须有这个5个基础接口。

所以,当我们再添加一个实体(比如Teacher)时,在TeacherService中也要写和StudentService几乎一样的代码(其实就是把代码里所有“Student”换成“Teacher”就行了)。

这么多重复代码,显然是不符合程序员的审美的。这个时候使用泛型仓储就再适合不过了。

2. 道

整体思路是,写一个基类“BaseService”,这个基类是一个抽象的泛型类,然后让每个实体的Service都继承它。

那么当再新建一个Service时,不需要写任何代码,就已经实现了我们需要的那5种基础CRUD了。

2.1 IService层

在IService层新建一个IBase接口:

using RayPI.Model;

namespace RayPI.IService
{
public interface IBase<T> where T:class,new()
{
/// <summary>
/// 获取分页列表
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <returns></returns>
TableModel<T> GetPageList(int pageIndex, int pageSize);
/// <summary>
/// 获取单个
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
T Get(long id);
/// <summary>
/// 添加
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
bool Add(T entity);
/// <summary>
/// 编辑
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
bool Update(T entity);
/// <summary>
/// 批量删除
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
bool Dels(dynamic[] ids);
}
}

IBase

该接口是个泛型接口,里面集成了对泛型T的5中基础CRUD操作。

2.2 Service层

在Service层新建一个BaseService类:

using RayPI.Model;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text; namespace RayPI.Service
{
/// <summary>
/// 服务层基类
/// </summary>
/// <typeparam name="T"></typeparam>
public abstract class BaseService<T> where T:class,new()
{
public BaseService()
{
db = GetClient();
sdb = db.GetSimpleClient();
}
public SqlSugarClient db;
public SimpleClient sdb;
/// <summary>
/// 获取客户端
/// </summary>
/// <returns></returns>
private SqlSugarClient GetClient()
{
SqlSugarClient db = new SqlSugarClient(
new ConnectionConfig()
{
ConnectionString = BaseDBConfig.ConnectionString,
DbType = DbType.SqlServer,
IsAutoCloseConnection = true
}
);
db.Aop.OnLogExecuting = (sql, pars) =>
{
Console.WriteLine(sql + "\r\n" + db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));
Console.WriteLine();
};
return db;
} #region CRUD
public TableModel<T> GetPageList(int pageIndex, int pageSize)
{
PageModel p = new PageModel() { PageIndex = pageIndex, PageSize = pageSize };
Expression<Func<T, bool>> ex = (it => == );
List<T> data = sdb.GetPageList(ex, p);
var t = new TableModel<T>
{
Code = ,
Count = p.PageCount,
Data = data,
Msg = "成功"
};
return t;
} public T Get(long id)
{
return sdb.GetById<T>(id);
} public bool Add(T entity)
{
return sdb.Insert(entity);
} public bool Update(T entity)
{
return sdb.Update(entity);
} public bool Dels(dynamic[] ids)
{
return sdb.DeleteByIds<T>(ids);
}
#endregion
}
}

BaseService

该类为abstract抽象类,只能用来被其他类继承,不能实例化。

然后该类除了之前的获取SqlSugarClient的函数,还了5个集成基础CRUD操作,不一样的是这里不是传的实体类,而是一个泛型T。

3. 果

下面,我们写一个Teacher的完整的增删改查。

先在数据库新建一张教师表:

然后运行项目,调用我们之前写好的自动生成实体类的接口:

生成的实体类是这样的:

在IService层新建一个ITeacher接口:

跟之前不一样的是,这个接口里不需要再写增删改查的接口了,直接继承IBase,把Teacher传过去,就行了。

在Service层,新建一个TeacherService:

该Service也不要写增删改查,直接继承BaseService就有了。

然后Bussiness层和控制器层这里就不说了,跟之前一样:

运行调试:

这样,不用写任何底层仓储,就能实现基础的增删改查了,是不是很爽~

【从零开始搭建自己的.NET Core Api框架】(六)泛型仓储的作用的更多相关文章

  1. 【从零开始搭建自己的.NET Core Api框架】(七)授权认证进阶篇

    系列目录 一.  创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架——SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSuga ...

  2. 【从零开始搭建自己的.NET Core Api框架】(四)实战!带你半个小时实现接口的JWT授权验证

    系列目录 一.  创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架——SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSuga ...

  3. 【从零开始搭建自己的.NET Core Api框架】(一)创建项目并集成swagger:1.1 创建

    系列目录 一.  创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架——SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSuga ...

  4. 【从零开始搭建自己的.NET Core Api框架】(三)集成轻量级ORM——SqlSugar:3.1 搭建环境

    系列目录 一.  创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架——SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSuga ...

  5. 【从零开始搭建自己的.NET Core Api框架】(五)由浅入深详解CORS跨域机制并快速实现

    系列目录 一.  创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架——SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSuga ...

  6. 【从零开始搭建自己的.NET Core Api框架】(二)搭建项目的整体架构

    系列目录 一.  创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架——SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSuga ...

  7. 从零开始搭建自己的.NET Core Api框架-1目录

    https://www.cnblogs.com/RayWang/p/9216820.html 系列目录 一.  创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. ...

  8. net core天马行空系列: 泛型仓储和声明式事物实现最优雅的crud操作

    系列目录 1.net core天马行空系列:原生DI+AOP实现spring boot注解式编程 哈哈哈哈,大家好,我就是那个高产似母猪的三合,长久以来,我一直在思考,如何才能实现高效而简洁的仓储模式 ...

  9. 从零开始搭建django前后端分离项目 系列六(实战之聚类分析)

    项目需求 本项目从impala获取到的数据为用户地理位置数据,每小时的数据量大概在8000万条,数据格式如下: 公司要求对这些用户按照聚集程度进行划分,将300米范围内用户数大于200的用户划分为一个 ...

随机推荐

  1. iOS UINavigationController Class Translation

    类   UINavigationController 一个容器视图控制器,定义了用于导航分层内容的基于堆栈的方案.   概述   导航控制器是一个在导航界面中,管理一个或多个子视图控制器的容器视图控制 ...

  2. 在Windows Server2016中安装SQL Server2016

    SQL Server2016安装硬.软件条件:点击打开链接 WinServer2016的安装参见: 在虚拟机中安装Windows Server2016 1. SQL Server2016下载地址: - ...

  3. sql server使用sql语句上传Excel到数据库

    USE pro GO SELECT  * INTO   temp_budget_price@201704170950 FROM    OPENDATASOURCE('Microsoft.Jet.OLE ...

  4. FreeBSD 与中文

    $ setenv LC_ALL en_US.UTF- 然后用 locale 检查 en_US 不是重点,重点是 UTF-8 . 然后用 putty,原因是默认终端又没有中文字体...然后就能输入输出中 ...

  5. 小游戏canvas直接操作ImgaeData时的几个优化点

    前不久在处理一个canvas绘图需求时,经过不断测试优化,将重绘一帧的时间由400ms降低至20ms左右,基本满足了要求.特此记录一下优化方向. 设备环境:Android,360*720,pixelR ...

  6. SharePoint修改左上角文字的命令行

    $webapp = Get-SPWebApplication “http://test-spweb1” --需要修改的站点$webapp.SuiteNavBrandingText = “XXXXXX” ...

  7. SpringBoot热部署

    SpringBoot的热部署方式分为两种  1.SpringLoader 方式一:以maven插件方式使用SpringLoader <!-- Springloader插件 --> 1.1 ...

  8. 详解 IntelliJ IDEA 配置和启动maven 项目 步骤

    1.本地安装maven 1.1 安装 https://www.cnblogs.com/wkrbky/p/6350334.html?utm_source=itdadao&utm_medium=r ...

  9. ISP PIPLINE (九_2) Denoise 之 time domain denoise

    时域噪声是空域噪声在时间上波动的一种描述. 1.多帧平均去噪法 1.1 理论: 1.2 帧数增加,噪声减小: 1.3 IIR滤波器的效果 2.1中的两种方法在拍摄视频的时候,如果有运动物体,则会出现拖 ...

  10. DBUtils - Python数据库连接池

    flask没有ORM操作这一功能, 但是想要操作数据库怎么办呢, 使用第三方包DBUtils 查询需要SQL原生语句! DBUtils 第一步还是要下载 使用pycharm直接搜索DBUtils fr ...