首页 > 数据库 >WebAPI项目框架仓储模式+导入SqlSuag

WebAPI项目框架仓储模式+导入SqlSuag

时间:2024-07-02 21:52:31浏览次数:17  
标签:WebAPI Task return await class 导入 async SqlSuag public

仓储(Respository)是对数据库访问的一个封装

解决方案新建Respository文件夹,新建类库Web.Core.IRepository,Web.Core.Repository

解决方案新建Services文件夹,新建类库Web.Core.IServices,Web.Core.Services

在类库Web.Core.Model下面新建Entity文件夹

SqlSugar是国人开发者开发的一款高性能、轻量级 ORM框架,官网 SqlSugar ORM 5.X 官网 、文档、教程 - SqlSugar 5x - .NET果糖网

Respository层和Model层引入SqlSugarCore

Repository层新建suger文件夹,

新建BaseDBConfig.cs 数据库连接字符串

1 public class BaseDBConfig
2     {
3         /// <summary>
4         /// 数据库连接字符串
5         /// </summary>
6         public static string ConnectionString { get; set; }
7 
8     }

新建DBConext.cs帮助类

 1 public class DbContext<T> where T : class, new()
 2     {
 3         public DbContext()
 4         {
 5             Db = new SqlSugarClient(new ConnectionConfig()
 6             {
 7                 ConnectionString = BaseDBConfig.ConnectionString,
 8                 DbType = DbType.SqlServer,
 9                 InitKeyType = InitKeyType.Attribute,//从特性读取主键和自增列信息
10                 IsAutoCloseConnection = true,//开启自动释放模式和EF原理一样我就不多解释了
11 
12             });
13             //调式代码 用来打印SQL 
14             Db.Aop.OnLogExecuting = (sql, pars) =>
15             {
16                 Console.WriteLine(sql + "\r\n" +
17                     Db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));
18                 Console.WriteLine();
19             };
20 
21         }
22         //注意:不能写成静态的
23         public SqlSugarClient Db;//用来处理事务多表查询和复杂的操作
24         public SimpleClient<T> CurrentDb { get { return new SimpleClient<T>(Db); } }//用来操作当前表的数据
25 
26 
27 
28 
29     }

在program.cs里面增加读取appsettings.json中保存的数据库连接字符串

 1 //数据库配置

2 BaseDBConfig.ConnectionString = builder.Configuration.GetSection("AppSettings:ConnectionString").Value; 

IRepository 层中添加Base文件夹,并添加基类接口 IBaseRepository.cs

 1 /// <summary>
 2     /// 基类接口,其他接口继承该接口
 3     /// </summary>
 4     /// <typeparam name="TEntity"></typeparam>
 5    public interface IBaseRepository<TEntity> where TEntity : class
 6     {
 7         /// <summary>
 8         /// 根据ID列表查询
 9         /// </summary>
10         /// <param name="objId"></param>
11         /// <returns></returns>
12         Task<TEntity> QueryByID(object objId);
13 
14         /// <summary>
15         /// 查询所有数据
16         /// </summary>
17         /// <param name="objId"></param>
18         /// <returns></returns>
19         Task<List<TEntity>> Query();
20 
21         /// <summary>
22         /// 添加
23         /// </summary>
24         /// <param name="model"></param>
25         /// <returns></returns>
26         Task<long> Add(TEntity model);
27 
28         /// <summary>
29         /// 修改
30         /// </summary>
31         /// <param name="model"></param>
32         /// <returns></returns>
33         Task<bool> Update(TEntity model);
34 
35         /// <summary>
36         /// 根据id列表删除
37         /// </summary>
38         /// <param name="ids"></param>
39         /// <returns></returns>
40         Task<bool> DeleteByIds(object[] ids);
41 
42         /// <summary>
43         /// 根据ID删除
44         /// </summary>
45         /// <param name="id"></param>
46         /// <returns></returns>
47         Task<bool> DeleteById(object id);
48 
49     }

Repository 层中,添加Base文件夹,并添加 BaseRepository.cs 基类

 1 public class BaseRepository<TEntity> : DbContext<TEntity>, IBaseRepository<TEntity> where TEntity : class, new()
 2     {
 3         /// <summary>
 4         /// 写入实体数据
 5         /// </summary>
 6         /// <param name="model"></param>
 7         /// <returns></returns>
 8         public async Task<long> Add(TEntity model)
 9         {
10             var i = await Task.Run(() => Db.Insertable(model).ExecuteCommand());
11             //返回的i是long类型,这里你可以根据你的业务需要进行处理
12             return i;
13         }
14 
15         /// <summary>
16         /// 根据ID列表删除
17         /// </summary>
18         /// <param name="ids"></param>
19         /// <returns></returns>
20         public async Task<bool> DeleteByIds(object[] ids)
21         {
22             var i = await Task.Run(() => Db.Deleteable<TEntity>().In(ids).ExecuteCommand());
23             return i > 0;
24         }
25 
26         /// <summary>
27         /// 根据ID删除
28         /// </summary>
29         /// <param name="ids"></param>
30         /// <returns></returns>
31         public async Task<bool> DeleteById(object id)
32         {
33             var i = await Task.Run(() => Db.Deleteable<TEntity>().In(id).ExecuteCommand());
34             return i > 0;
35         }
36         /// <summary>
37         /// 根据ID查询一条数据
38         /// </summary>
39         /// <param name="objId"></param>
40         /// <returns></returns>
41         public async Task<TEntity> QueryByID(object objId)
42         {
43             return await Task.Run(() => Db.Queryable<TEntity>().InSingle(objId));
44         }
45 
46         /// <summary>
47         /// 查询所有数据
48         /// </summary>
49         /// <param name="objId"></param>
50         /// <returns></returns>
51         public async Task<List<TEntity>> Query()
52         {
53             return await Task.Run(() => Db.Queryable<TEntity>().ToListAsync());
54         }
55         /// <summary>
56         /// 更新实体数据
57         /// </summary>
58         /// <param name="model"></param>
59         /// <returns></returns>
60         public async Task<bool> Update(TEntity model)
61         {
62             //这种方式会以主键为条件
63             var i = await Task.Run(() => Db.Updateable(model).ExecuteCommand());
64             return i > 0;
65         }
66     }

IService 层中添加Base文件夹,并添加接口 IBaseService.cs。

 1 public interface IBaseServices<TEntity> where TEntity : class
 2     {
 3         /// <summary>
 4         /// 根据ID列表删除
 5         /// </summary>
 6         /// <param name="ids"></param>
 7         /// <returns></returns>
 8         Task<bool> DeleteByIds(object[] ids);
 9 
10         /// <summary>
11         /// 根据ID删除
12         /// </summary>
13         /// <param name="id"></param>
14         /// <returns></returns>
15         Task<bool> DeleteById(string id);
16         /// <summary>
17         /// 根据ID查询
18         /// </summary>
19         /// <param name="objId"></param>
20         /// <returns></returns>
21         Task<TEntity> QueryByID(object objId);
22 
23         /// <summary>
24         /// 查询所有数据
25         /// </summary>
26         /// <returns></returns>
27         Task<List<TEntity>> Query();
28 
29         /// <summary>
30         /// 添加实体
31         /// </summary>
32         /// <param name="model"></param>
33         /// <returns></returns>
34         Task<long> Add(TEntity model);
35 
36         /// <summary>
37         /// 更新实体
38         /// </summary>
39         /// <param name="model"></param>
40         /// <returns></returns>
41 
42         Task<bool> Update(TEntity model);
43     }

Service 层中添加Base文件夹,并添加接口 BaseService.cs。

 1 public class BaseServices<TEntity> : IBaseServices<TEntity> where TEntity : class, new()
 2     {
 3         public IBaseRepository<TEntity> baseDal = new BaseRepository<TEntity>();
 4 
 5         /// <summary>
 6         /// 写入实体
 7         /// </summary>
 8         /// <param name="model"></param>
 9         /// <returns></returns>
10         public async Task<long> Add(TEntity model)
11         {
12             return await baseDal.Add(model);
13         }
14 
15         /// <summary>
16         /// 根据ID删除
17         /// </summary>
18         /// <param name="ids"></param>
19         /// <returns></returns>
20 
21         public async Task<bool> DeleteByIds(object[] ids)
22         {
23             return await baseDal.DeleteByIds(ids);
24         }
25 
26         /// <summary>
27         /// 根据ID查询
28         /// </summary>
29         /// <param name="objId"></param>
30         /// <returns></returns>
31         public async Task<TEntity> QueryByID(object objId)
32         {
33             return await baseDal.QueryByID(objId);
34         }
35 
36         /// <summary>
37         /// 更新实体
38         /// </summary>
39         /// <param name="model"></param>
40         /// <returns></returns>
41         public async Task<bool> Update(TEntity model)
42         {
43             return await baseDal.Update(model);
44         }
45 
46         /// <summary>
47         /// 查询所有数据
48         /// </summary>
49         /// <returns></returns>
50         public async Task<List<TEntity>> Query()
51         {
52             return await baseDal.Query();
53         }
54 
55         /// <summary>
56         /// 根据ID删除
57         /// </summary>
58         /// <param name="ids"></param>
59         /// <returns></returns>
60         public async Task<bool> DeleteById(string id)
61         {
62             return await baseDal.DeleteById(id);
63         }
64     }

在Model层下的Entity文件,新建student.cs实体类

 1 /// <summary>
 2     /// 学生表
 3     /// </summary>
 4     public class Student
 5     {
 6         /// <summary>
 7         /// id
 8         /// </summary>
 9         public int Id { get; set; }
10         /// <summary>
11         /// 姓名
12         /// </summary>
13         public string Name { get; set; }
14         /// <summary>
15         /// 年龄
16         /// </summary>
17         public int Age { get; set; }
18     }

在IRepository层中,新建IStudentRepository接口,继承自IBaseRepository<Student>

public interface IStudentRepository:IBaseRepository<Student>
{
}

在Repository层中,新建StudentRepository接口,继承自BaseRepository<Student>, IStudentRepository

public class StudentRepository : BaseRepository<Student>, IStudentRepository
{
}

在IServices层中,新建IStudentService接口,继承自IBaseServices<Student>

public interface IStudentService : IBaseServices<Student>
{
}

在Services层中,新建StudentService接口,继承自BaseService<Student>, IStudentService

public class StudentService : BaseService<Student>, IStudentService
{

}
新建控制器StudentController,新增接口

 1 public class StudentController : BaseApiController
 2     {
 3         /// <summary>
 4         /// 添加数据
 5         /// </summary>
 6         /// <returns></returns>
 7         [HttpGet]
 8         public async Task<IActionResult> Add(Student student)
 9         {
10             IStudentService userService = new StudentService();
11             var count = await userService.Add(student);
12             return Ok(count);
13         }
14     }

运行项目,插入数据成功。

 

 

标签:WebAPI,Task,return,await,class,导入,async,SqlSuag,public
From: https://www.cnblogs.com/leon1128/p/18280611

相关文章

  • WebAPI项目框架JWT权限验证
    JWT是什么?校验逻辑?授权过程?这里就不过多的阐述了,直接上代码在appsettings.json中配置jwt参数的值SecretKey必须大于16个字符1{2"Logging":{3"LogLevel":{4"Default":"Information",5"Microsoft.AspNetCore":"Warni......
  • Neo4j-数据导入
    1.1.1导入对比常用的导入形式对比1.1.2csv文件导出(1).注意CSV文件需要使用utf8-无Bom格式(2).如果字段串中有逗号,需要给字符串的前后两端加上",(3).如果字符串中有双引号,需要把双引号替换成"“,再在字符串的前后两端加上”注意:导出csv不需要包含表头,增量和全量统一......
  • WebAPI项目框架新建读取配置文件帮助类
    在.netcorewebapi项目中,我们会把配置信息同意放置在appsettings.json中,通过新建读取帮助类,更加简单的读取配置信息。新建公共类库文件夹Common,新建公共类库Web.Core.Common在Web.Core.Common类库下新建Helper文件夹,新建AppSettings帮助类 .NetCore6.0WebAPI项目框架搭......
  • PS导入新的字体样式
    1.字体素材网站: https://www.100font.com/     下载字体文件首先从合适的来源下载想要导入的字体文件。字体文件通常是以.ttf(TrueTypeFont)或.otf(OpenTypeFont)为扩展名的文件。 2. 丢到这个目录 3.ok 4.注意事项1、版权问题:确保......
  • TDengine使用taosdump工具进行数据导出导入
    数据备份(导出)可以使用命令导出sql相关文件,这些导出的相关文件可以导入时使用taosdump-o[导出文件存放路径,需要是已存在目录]-D[数据库名]导出所有数据库使用-A代替-D,后不跟数据库名,但是博主没成功,使用-D单独导出一个库是很稳定的,导出目录下包含一个sql文件和一个tdengin......
  • 《优化接口设计的思路》系列:第十一篇—表格的导入导出接口优化
    一、前言大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。作为一名从业已达六年的老码农,我的工作主要是开发后端Java业务系统,包括各种管理后台和小程序等。在这些项目中,我设计过单/多......
  • WebApi读取配置文件帮助类
    1///<summary>2///appsettings.json操作类3///</summary>4publicclassAppSettings5{6staticIConfigurationConfiguration{get;set;}7staticstringcontentPath{get;set;}89p......
  • webAPI连接SQLserver,并快速建立数据模型
    首先,你需要有一个webAPI来作为Android应用和SQLserver数据库之间的中间件,创建该api在项目中导入三个NuGet包通过服务器资源管理器连接数据库,获取数据库连接的字符串 快速建立数据模型思路:通过数据库创建数据类:导入包=>打开程序包管理器控制台=>选择项目=>Scaffold-DbCont......
  • 硬件开发笔记(二十):AD21导入外部下载的元器件原理图库、封装库和3D模型
    若该文为原创文章,转载请注明原文出处本文章博客地址:https://hpzwl.blog.csdn.net/article/details/139707771长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…硬件相关开发......
  • Java 超详细实现导入导出 (包含时间转换问题和样式)
    序言工作中遇到了导入导出问题,并且出现了导入或导出Excel时间格式变为数字的问题。通过学习解决实现了这些功能,记录总结分享给大家。本文将详细介绍如何使用Java编程语言和ApachePOI库来实现这些功能。我们将通过一个示例项目演示如何从数据库中读取数据并将其导出为Ex......