0


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

前提:

安装最新的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.Design
dotnet add package Microsoft.EntityFrameworkCore.Tools
dotnet 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博客


本文转载自: https://blog.csdn.net/2302_80481841/article/details/141640136
版权归原作者 夜喵YM 所有, 如有侵权,请联系我们删除。

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

还没有评论