当前位置:首页 » 《休闲阅读》 » 正文

[YM]课设-C#-WebApi-Vue-员工管理系统 (二)连接数据库

16 人参与  2024年10月05日 08:00  分类 : 《休闲阅读》  评论

点击全文阅读


前提:

安装最新的MySQL

下载地址:
MySQL :: Download MySQL Installer

黑马视频课程:

Day06-02. MySQL-概述-安装配置_哔哩哔哩_bilibili

没有任何mysql图形化界面的软件情况

还不想下载

那么我们可以用cmd去操作

操作mysql:

win-r

打开cmd

在之前已经把用户名和密码已经设置好了

mysql -u用户名 -p密码

输入指令进入数据库

创建数据库以及数据表:

这边就直接给出sql的脚本

[YM]课设-C#-WebApi-Vue-员工管理系统 Api接口文档&SQL脚本-CSDN博客

一句一句输入

 好员工表emp和部门表dept已经创建成功

使用selet可以查看表中的数据 

C#WebApi中连接数据库:

打开我们心爱的vscode

打开终端

依次在终端中输入指令下载相关mysql数据集

dotnet add package Microsoft.EntityFrameworkCore.Designdotnet add package Microsoft.EntityFrameworkCore.Toolsdotnet add package MySql.EntityFrameworkCore

下载完成之后再下载一下ef 操作数据库的tool

dotnet tool install -g dotnet-ef

到此关于mysql的插件已经下载好了

dotnet ef dbContext scaffold "server=localhost;uid=用户名;pwd=密码;port=3306;database=csdndb" MySql.EntityFrameworkCore -o Entities

把自己mysql的用户名和密码替换上

系统自动生成Entities文件

加载完毕之后

生成一个context上下文类,用于操作数据库

同时会根据数据库中的表生成对应的Model

虽说系统自己生成了

但是我们之后要和前端交互

避免不必要的麻烦

我们自己创建Model类

右键点击Models文件,再次点击创建New C#的class

 

输入创建DeptModel和EmpModel

创建成功

按照数据库中的列名创建Model中的属性 

属性名一定一定要和数据库中的列名大小写一致 !!!

创建好之后Entities中的Dept和Emp就可以删除掉了 

最终效果:

接下来在配置文件中注册数据库

打开appsettings.json文件

加入

"ConnectionStrings": {        "MySQLConnection":"server=localhost;uid=用户名;pwd=密码;port=3306;database=csdndb;"},

 换成自己的数据库用户名和密码

打开program.cs进行注册数据库上下文

加入Service代码

// 注册数据库上下文builder.Services.AddDbContext<CsdndbContext>(options =>{    options.UseMySQL(builder.Configuration.GetConnectionString("MySQLConnection")!);});

 到此配置就算完事了

突然发现Entities中的类报错了

这是因为我们后续使用了跟为标准的配置文件进行配置

下面我们就把这些不必要的给删除掉

 

到这我们数据库就算是配置完成了

我们简单写一个小案例进行测试

小案例:

需求:

请求路径:/depts

请求方式:GET

接口描述:该接口用于部门列表数据查询

相信上一篇文章一已经了解了一部分写法

现在规范写法

实现controller,service,mapper分层

controller:

在Controllers下面创建一个DeptController类

在controller就要调用deptService中的方法

service:

创建一个impl包

impl包里是service的实现类

而外部创建service的接口

后续调用service就是调用接口中的方法

 impl中的DeptService要继承IDeptService接口

在接口中声明刚才在controller中调用的函数

DeptService具体实现IDeptService声明的方法

DeptService的FindAll实际没有什么复杂的处理

直接从mapper中获得数据

返回给controller层即可

mapper:

在Mappers文件创建DeptMapper 

声明方法FindAll

到这,应该回想回想这三者中每个是实现什么的

前言也讲到了mapper就是和数据库进行映射

实现crud操作

前面我们在program.cs中已经注册了数据库上下文

使用DeptMapper的构造函数加载context

为什么能实现这样的操作呢?

涉及到了IOC容器管理, 也就是说我们在program.cs中注册了context,主程序就自动会在你使用时传递指定位置并且管理注册的负,不是人为去处理和管理,降低了代码的耦合度

我们调用context

调用方法:

context.表名.方法

context.Dept拿到了Dept中的所有数据,toList把数据转化为List,赋值到list变量上面

最后传递回service 

回到DeptService:

和mapper层一样

想要调用deptmapper就是在构造函数中加载

回到controller层:

和前面道理一样

这里值得注意的是我们调用的是接口中的IDeptService,不是DeptService实现类

现在都没有报错

那我们运行测试一下

在终端中dotnet run启动一下

打开swagger

哦豁!!!

出现了 

打开Dept我们try一下这个api接口

然后........!!!!????报错?

 那我们读一下下面的错误信息

大致意思就是我们在启动controller的时候获取不到service

这是为啥呢?

可能有的小伙伴已经反应过来了

在mapper层调用数据库context的时候,它已经在program.cs中注册过了

而现在调用的service和mapper还没有注册

下面我们在program.cs中注册一下

IOC容器管理注册:

打开program.cs

注意到项目生成时还有一行注释

// Add services to the container.

 一读就明白是吧

就是把服务给容器中

那为什么会AddTransient函数呢?

不仅人生命周期,程序也有生命周期

启动时,运行时,关闭前,关闭后等等

但是我们最常用的还是启动那一刻

就相当于是程序启动时就把这些服务加载到自己的容器中

在使用时再从容器中取

是不是很智能

测试:

注册好之后重启程序 

再次打开swagger测试api接口

try一下!!!

OHHHHHHHHHHHHHHH!!!!

Success成功 

当然我们可以在api接口网站查看信息

是否渲染到了前端

 没问题

到这

我们第一个查询所有部门的小案例也就完成了

————————————

持续更新中...

关注[YM]课设专栏[YM]课设_夜喵YM的博客-CSDN博客

文章:

[YM]课设-C#-WebApi-Vue-员工管理系统 (前言)-CSDN博客

[YM]课设-C#-WebApi-Vue-员工管理系统 (一)创建webapi项目-CSDN博客


点击全文阅读


本文链接:http://zhangshiyu.com/post/167814.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1