前言

昨天是写着写着发现,时间不早了,已经养成了晚上下班抽时间看看能写点儿啥的习惯(貌似),今天实在是不想让昨天没做完的事情影响,所以又坐下,沉下心(周末了),开始把数据库这块儿的补充完整。

昨天已经介绍过大部分的东西,包括方法封装也是基本的展示了下,实际上应该先介绍这一篇,从怎么用来引导封装类库,但是既然写都写出来了就不想再调整了,今天就主要说下怎么实际使用方法吧,需要查看具体使用的类库可查看net core Webapi基础工程搭建(六)——数据库操作_Part 1。(懒的不能行)

开始

闲话不多说,Service层搞起,新建两个文件夹,一个Interfaces,一个Implements,另外顺带新建个Common的文件夹,把上一篇的三个类放进去(纯粹是看的,归类,放不放不影响使用)。



上一篇我们创建了一个StudentEntity这个对象,忘了的朋友可以去看下。

新建一个IStudentService接口,继承IBaseService

  1. public interface IStudentService : IBaseService<StudentEntity>
  2. {
  3. }

新建一个StudentService实现类,继承BaseService,实现IStudentService

  1. public class StudentService : BaseService<StudentEntity>, IStudentService
  2. {
  3. }

好了,完了,回家睡觉吧。

使用

如果你看到上面的直接走了,对不起,娱乐一下,做开发千万不敢像乌鸦学盖房子,没听过自行度娘,我也不会讲故事。

我们需要在StartUp这里将接口与实现关联,有些博客会介绍自动关联用于解耦,需要也可以自行百度。

补充说明,昨天好像忘记在WebApi工程引入Service与Entity两个工程了,见谅见谅,特此补充。

这里我在Service项目下Common下新建Depends文件夹,新建一个类ServiceInjection,在这统一放接口与实现的对应关系。

  1. public class ServiceInjection
  2. {
  3. public static void ConfigureRepository(IServiceCollection services)
  4. {
  5. services.AddSingleton<IStudentService, StudentService>();
  6. }
  7. }

对于依赖注入,这里简短穿插几句,后续有新的感受会再补充。

方法 说明
Transient 每一次调用都会创建一个新的实例
Scoped 一个作用域中只实例化一个
Singleton 整个应用程序生命周期以内只创建一个实例

然后我们在StartUp的ConfigureServices最前面加上这句话,这里在构造函数加上这句,用途就是由AprilConfig来统一接管配置信息。

  1. public Startup(IConfiguration configuration)
  2. {
  3. ...之前的东西
  4. AprilConfig.InitConfig(configuration);
  5. }
  6. public void ConfigureServices(IServiceCollection services)
  7. {
  8. ServiceInjection.ConfigureRepository(services);
  9. ...之前的东西
  10. }

当然对应要有接收的方法。

  1. public class AprilConfig
  2. {
  3. public static IServiceProvider ServiceProvider;
  4. public static IConfiguration Configuration;
  5. public static void InitConfig(IConfiguration _configuration)
  6. {
  7. Configuration = _configuration;
  8. }
  9. }

好了,所有的都写好后,我们继续拿万恶的Values控制器(多好的开刀对象)实验。

在这之前,确定好你的数据库是哪类,SqlServer请按1,MySql请按0,其他请自行查看文档。

为了方便项目统一管理,我们要好好利用appsettings,就像我们当时使用web.config一样,连接串自己根据实际情况修改。

  1. //新加一个
  2. "DefaultSqlConnectionString": {
  3. "MySql": "server=127.0.0.1;userid=root;password=root;database=test;"
  4. }

在我们Util层的AprilConfig,来获取参数。

  1. private static string _MySqlConnectionString = string.Empty;
  2. /// <summary>
  3. /// MySql默认连接串
  4. /// </summary>
  5. public static string MySqlConnectionString
  6. {
  7. get
  8. {
  9. if (string.IsNullOrEmpty(_MySqlConnectionString))
  10. {
  11. _MySqlConnectionString = Configuration["DefaultSqlConnectionString:MySql"];
  12. }
  13. return _MySqlConnectionString;
  14. }
  15. }

然后我们来修改BaseService当时留的连接串信息。



创建表结构,这里说明下,不是说非要创建,毕竟SqlSugar有CodeFirst(当然也有DbFirst),需要的朋友可去文档查看,也比较简单,在程序启动的时候来判断是否有表,或者专门做个接口做初始化操作也可以,下图做用法简介,具体还是查看文档吧,毕竟还有备份啊改列名什么的。

万事具备,之前Values这个挨千刀的东风,构造函数来获取IStudentService这个接口。

  1. public class ValuesController : ControllerBase
  2. {
  3. private readonly IStudentService _service;
  4. public ValuesController(IStudentService service)
  5. {
  6. _service = service;
  7. }
  8. }
  • 插入
  1. [HttpGet]
  2. public ActionResult<IEnumerable<string>> Get()
  3. {
  4. StudentEntity entity = new StudentEntity();
  5. entity.Name = "小明";
  6. entity.Age = 18;
  7. entity.Number = "007";
  8. entity.Sex = 0;
  9. entity.Address = "大洛阳";
  10. _service.Insert(entity);
  11. return new string[] { "value1", "value2" };
  12. }

  • 修改

    这里刚好也演示下SqlFilterEntity这个自己写的方法的用法,并且扩展了下实体的方法,方便使用。

SqlFilterEntity扩展方法

  1. //...之前的实体对象
  2. /// <summary>
  3. /// 添加查询条件
  4. /// </summary>
  5. /// <param name="filter">条件</param>
  6. /// <param name="relation">关系</param>
  7. public void Append(string filter, string relation = "and")
  8. {
  9. if (string.IsNullOrEmpty(filter))
  10. {
  11. return;
  12. }
  13. if (Filter.Length > 0)
  14. {
  15. Filter += relation;
  16. }
  17. Filter += filter;
  18. }
  19. /// <summary>
  20. /// 添加查询参数
  21. /// </summary>
  22. /// <param name="key">键</param>
  23. /// <param name="value">值</param>
  24. public void Add(string key, object value)
  25. {
  26. if (string.IsNullOrEmpty(key) || value == null)
  27. {
  28. return;
  29. }
  30. if (Value == null)
  31. {
  32. Value = new Dictionary<string, object>();
  33. }
  34. if (Value.ContainsKey(key))
  35. {
  36. Value[key] = value;
  37. }
  38. else
  39. {
  40. Value.Add(key, value);
  41. }
  42. }

修改测试

  1. StudentEntity entity = null;
  2. SqlFilterEntity filter = new SqlFilterEntity();
  3. filter.Append($"ID=@ID");
  4. filter.Add("@ID", 1);
  5. entity = _service.GetEntity(filter);
  6. if (entity != null)
  7. {
  8. entity.Name = "我被修改了";
  9. _service.Update(entity);
  10. }

  • 删除

    删除这个不多说,就是把修改的换个方法。

  • 查看

这里直接做分页的测试,拿Values/{id}这个接口做实验。

  1. [HttpGet("{id}")]
  2. public ActionResult<string> Get(int id)
  3. {
  4. string value = string.Empty;
  5. //value = CacheUtil.Get<string>("cachetest");
  6. //value = SessionUtil.GetSession("test");
  7. //value = CookieUtil.GetCookies("apirlcookietest");
  8. int count = 0;
  9. List<StudentEntity> lists = _service.GetPageList(id, 10, "", null, "", out count);
  10. value = JsonConvert.SerializeObject(lists);
  11. return value;
  12. }

小结

这里大致上介绍了SqlSugar的用法已经一些基础的不能基础的封装,实际使用的话,肯定需要扩展完善的,但是作为教程来讲,我也不可能把全部的情况都考虑到,毕竟业务不同,没有万金油,只有不停的完善更新,业务场景多了,功能就完善了,一步一步来,一口吃不成个胖子(这个胖子不是你认识的那个胖子),不过还是感慨下这些开源的好类库,真的是方便了开发人员,为了解放程序猿的双手(yy)做出了嗨翻天的贡献,好了,回归正题,下一篇Aop的测试以及小东西

net core Webapi基础工程搭建(六)——数据库操作_Part 2的更多相关文章

  1. net core Webapi基础工程搭建(六)——数据库操作_Part 1

    目录 前言 SqlSugar Service层 BaseService(基类) 小结 前言 后端开发最常打交道的就是数据库了(静态网站靠边),上一篇net core Webapi基础工程搭建(五)-- ...

  2. net core Webapi基础工程搭建(七)——小试AOP及常规测试_Part 2

    目录 前言 引入 自定义属性 测试 小结 前言 前一篇讲到了中间层的使用,可能不是那么AOP,今天主要来说下一个轻量级的AOP第三方类库AspectoCore. 简单介绍下这个类库,AspectCor ...

  3. net core Webapi基础工程搭建(五)——缓存机制

    目录 前言 Cache Session Cookie 小结 补充 前言 作为WebApi接口工程,性能效率是必不可少的,每次的访问请求,数据库读取,业务逻辑处理都或多或少耗费时间,偶尔再来个各种花式f ...

  4. net core Webapi基础工程搭建(二)——创建工程

    目录 前言 创建工程 工程文件概述(个人理解) 运行 小结 前言 前面介绍了开发工具及net core版本,后端工程的框架结构开发工具及环境,因为是基础工程,所以没考虑太复杂的框架,如果有架构师请勿喷 ...

  5. net core Webapi基础工程搭建(七)——小试AOP及常规测试_Part 1

    目录 前言 拦截器 异常拦截器 测试结果 身份验证拦截器 测试 小结 补充 2019-07-31 前言 一天天不知道怎么过的,但确实挺忙,事赶事不带停那种,让我感觉跟在流水线干活一样,忙活的事差不多了 ...

  6. net core Webapi基础工程搭建(一)——开发工具及环境

    目录 开发工具 版本 后端框架 开发工具 Visual Studio 2019,既然要折腾那就体验最新版的开发工具有什么特殊的地方,之前个人开发使用的是2017. 下载地址:https://visua ...

  7. net core Webapi基础工程搭建(四)——日志功能log4net

    目录 前言 log4net 依然是,NuGet引用第三方类库 整合LogUtil 小结 前言 一个完整的项目工程离不开日志文件的记录,而记录文件的方法也有很多,可以自己通过Stream去实现文件的读写 ...

  8. net core Webapi基础工程搭建(三)——在线接口文档Swagger

    目录 前言 Swagger NuGet引用第三方类库 别急,还有 没错,注释 小结 前言 前后分离的好处,就是后端埋头做业务逻辑功能,不需要过多考虑用户体验,只专注于数据.性能开发,对于前端需要的数据 ...

  9. 第十九节:Asp.Net Core WebApi基础总结和请求方式

    一. 基础总结 1.Restful服务改造 Core下的WebApi默认也是Restful格式服务,即通过请求方式(Get,post,put,delete)来区分请求哪个方法,请求的URL中不需要写方 ...

随机推荐

  1. 五分钟了解Zabbix

    Zabbix-简介 Zabbix概念 Zabbix组成 Server Zabbix server 是 Zabbix agent 向其报告可用性.系统完整性信息和统计信息的核心组件.是存储所有配置信息. ...

  2. 00ff00 颜色信息

    RGB 0, 255, 0 百分比 0.0%, 100.0%, 0.0% 十六进制 00ff00 十进制 65280 二进制 00000000,11111111,00000000 CMYK 100.0 ...

  3. 【原】深度学习的一些经验总结和建议 | To do v.s Not To Do

    前言:本文同步发布于公众号:Charlotte数据挖掘,欢迎关注,获得最新干货- 昨天看到几篇不同的文章写关于机器学习的to do & not to do,有些观点赞同,有些不赞同,是现在算法 ...

  4. python面向过程编程小程序- 模拟超市收银系统

    6.16自我总结 功能介绍 程序功能介绍: 商品信息再读取修改买卖均已xlsx格式 且生成购物记录也按/用户名/购买时间.xlsx格式生成 账号密码输入错误三次按照时间进行冻结 用户信息已json格式 ...

  5. Hive的查询

    基本查询 全表和特定列查询 1.全表查询 select * from emp; 2.选择特定列查询 select empno,ename from emp; 注意: 1.SQL语言大小写不敏感 2.S ...

  6. SpringMvc最全的约束——你的感冒清个人总结

    SpringMvc最全的约束--你的感冒清个人总结 <?xml version="1.0" encoding="UTF-8"?> <beans ...

  7. ArcGIS API For JavaScript 开发(一)环境搭建

    标签:B/S结构开发,Asp.Net开发,WebGIS开发 前言:为什么写这个,一是学习:二是分享,共同进步,毕竟也是在这个园子里学到了很多: (一)环境搭建 集成开发环境:VS2013 Ultima ...

  8. 解密Kafka吞吐量高的原因

    众所周知kafka的吞吐量比一般的消息队列要高,号称the fastest,那他是如何做到的,让我们从以下几个方面分析一下原因. 生产者(写入数据) 生产者(producer)是负责向Kafka提交数 ...

  9. 2019前端面试系列——JS面试题

    判断 js 类型的方式 1. typeof 可以判断出'string','number','boolean','undefined','symbol' 但判断 typeof(null) 时值为 'ob ...

  10. Flutter学习笔记(12)--列表组件

    如需转载,请注明出处:Flutter学习笔记(12)--列表组件 在日常的产品项目需求中,经常会有列表展示类的需求,在Android中常用的做法是收集数据源,然后创建列表适配器Adapter,将数据源 ...