前提:
安装最新的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博客
版权归原作者 夜喵YM 所有, 如有侵权,请联系我们删除。