前言
在上一章节我们在后端框架中引入SQLite-net
ORM 并封装常用方法(SQLiteHelper),今天我们的任务是设计好班级管理相关的表、完善后端班级管理相关接口并对Swagger自定义配置。
七天.NET 8 操作 SQLite 入门到实战详细教程
- 第一天 SQLite 简介
- 第二天 在 Windows 上配置 SQLite 环境
- 第三天 SQLite 快速入门
- 第四天 EasySQLite 前后端项目框架搭建
- 第五天引入 SQLite-net ORM 并封装常用方法
EasySQLite 项目源码地址
GitHub 地址:https://github.com/YSGStudyHards/EasySQLite
班级管理相关的表设计
班级表的字段可以包括:
- 班级ID(ClassID):用于唯一标识每个班级[主键自增]。
- 班级名称(ClassName):班级的名称。
- 创建时间(CreateTime):班级创建的时间。
班级学生表的字段可以包括:
- 学生ID(StudentID):用于唯一标识每个学生[主键自增]。
- 班级ID(ClassID):所属班级的ID,与班级表中的班级ID相关联。
- 姓名(Name):学生的姓名。
- 年龄(Age):学生的年龄。
- 性别(Gender):学生的性别。
班级管理相关的表对应模型
SchoolClass
publicclassSchoolClass
{
///
///班级ID[主键,自动递增]
///
[PrimaryKey,AutoIncrement]
publicintClassID{get;set;}
///
///班级名称
///
publicstringClassName{get;set;}
///
///创建时间
///
publicDateTimeCreateTime{get;set;}
}
Student
publicclassStudent
{
///
///学生ID[主键,自动递增]
///
[PrimaryKey,AutoIncrement]
publicintStudentID{get;set;}
///
///班级ID
///
publicintClassID{get;set;}
///
///学生姓名
///
publicstringName{get;set;}
///
///学生年龄
///
publicintAge{get;set;}
///
///学生性别
///
publicstringGender{get;set;}
}
接口统一的响应模型
为了实现统一的响应模型,这里创建一个名为 ApiResponse的泛型类。
publicclassApiResponse
{
///
///是否成功
///
publicboolSuccess{get;set;}
///
///响应消息
///
publicstringMessage{get;set;}
///
///返回的数据
///
publicTData{get;set;}
}
学校班级管理接口代码
///
///学校班级管理
///
[ApiController]
[Route("[controller]")]
publicclassSchoolClassController:ControllerBase
{
privatereadonlySQLiteAsyncHelper_schoolClassHelper;
///
///依赖注入
///
///schoolClassHelper
publicSchoolClassController(SQLiteAsyncHelperschoolClassHelper)
{
_schoolClassHelper=schoolClassHelper;
}
///
///班级创建
///
///创建班级信息
///
[HttpPost]
publicasyncTask>CreateClass([FromBody]SchoolClassschoolClass)
{
try
{
intinsertNumbers=await_schoolClassHelper.InsertAsync(schoolClass);
if(insertNumbers>0)
{
returnnewApiResponse
{
Success=true,
Message="创建班级成功"
};
}
else
{
returnnewApiResponse
{
Success=false,
Message="创建班级失败"
};
}
}
catch(Exceptionex)
{
returnnewApiResponse
{
Success=false,
Message=ex.Message
};
}
}
///
///获取所有班级信息
///
[HttpGet]
publicasyncTask>>GetClasses()
{
try
{
varclasses=await_schoolClassHelper.QueryAllAsync().ConfigureAwait(false);
returnnewApiResponse>
{
Success=true,
Data=classes
};
}
catch(Exceptionex)
{
returnnewApiResponse>
{
Success=false,
Message=ex.Message
};
}
}
///
///根据班级ID获取班级信息
///
///班级ID
///
[HttpGet("{classId}")]
publicasyncTask>GetClass(intclassId)
{
try
{
varschoolClass=await_schoolClassHelper.QuerySingleAsync(c=>c.ClassID==classId).ConfigureAwait(false);
if(schoolClass!=null)
{
returnnewApiResponse
{
Success=true,
Data=schoolClass
};
}
else
{
returnnewApiResponse
{
Success=false,
Message="班级不存在"
};
}
}
catch(Exceptionex)
{
returnnewApiResponse
{
Success=false,
Message=ex.Message
};
}
}
///
///更新班级信息
///
///班级ID
///更新的班级信息
///
[HttpPut("{classId}")]
publicasyncTask>UpdateClass(intclassId,[FromBody]SchoolClassupdatedClass)
{
try
{
varexistingClass=await_schoolClassHelper.QuerySingleAsync(c=>c.ClassID==classId).ConfigureAwait(false);
if(existingClass!=null)
{
existingClass.ClassName=updatedClass.ClassName;
varupdateResult=await_schoolClassHelper.UpdateAsync(existingClass).ConfigureAwait(false);
if(updateResult>0)
{
returnnewApiResponse
{
Success=true,
Message="班级信息更新成功"
};
}
else
{
returnnewApiResponse
{
Success=false,
Message="班级信息更新失败"
};
}
}
else
{
returnnewApiResponse
{
Success=false,
Message="班级不存在"
};
}
}
catch(Exceptionex)
{
returnnewApiResponse
{
Success=false,
Message=ex.Message
};
}
}
///
///班级删除
///
///班级ID
///
[HttpDelete("{classId}")]
publicasyncTask>DeleteClass(intclassId)
{
try
{
vardeleteResult=await_schoolClassHelper.DeleteAsync(classId).ConfigureAwait(false);
if(deleteResult>0)
{
returnnewApiResponse
{
Success=true,
Message="班级删除成功"
};
}
else
{
returnnewApiResponse
{
Success=true,
Message="班级删除失败"
};
}
}
catch(Exceptionex)
{
returnnewApiResponse
{
Success=false,
Message=ex.Message
};
}
}
}
学生管理接口代码
///
///学生管理
///
[ApiController]
[Route("[controller]")]
publicclassStudentController:Controller服务器托管网Base
{
privatereadonlySQLiteAsyncHelper_studentHelper;
///
///依赖注入
///
///studentHelper
publicStudentController(SQLiteAsyncHelperstudentHelper)
{
_studentHelper=studentHelper;
}
///
///创建新的学生记录
///
///添加的学生信息
///
[HttpPost]
publicasyncTask>CreateAsync([FromBody]Studentstudent)
{
varresponse=newApiResponse();
try
{
varinsertNumbers=await_studentHelper.InsertAsync(student).ConfigureAwait(false);
if(insertNumbers>0)
{
response.Success=true;
response.Message="添加成功";
}
else
{
response.Success=false;
response.Message="插入失败";
}
}
catch(Exceptionex)
{
response.Success=false;
response.Message=ex.Message;
}
returnresponse;
}
///
///查询所有学生记录
///
///
[HttpGet]
publicasyncTask>>GetAllAsync()
{
varresponse=newApiResponse>();
try
{
varstudents=await_studentHelper.QueryAllAsync().ConfigureAwait(false);
response.Success=true;
response.Data=students;
}
catch(Exceptionex)
{
response.Success=false;
response.Message=ex.Message;
}
returnresponse;
}
///
///根据学生ID查询学生信息
///
///学生ID
///
[HttpGet("{studentID}")]
publicasyncTask>GetByIdAsync(intstudentID)
{
varresponse=newApiResponse();
try
{
varstudent=await_studentHelper.QuerySingleAsync(x=>x.StudentID==studentID).ConfigureAwait(false);
if(student!=null)
{
response.Success=true;
response.Data=student;
}
else
{
response.Success=false;
response.Message="未找到学生信息";
}
}
catch(Exceptionex)
{
response.Success=false;
response.Message=ex.Message;
}
returnresponse;
}
///
///更新学生记录
///
///学生ID
///更新的学生信息
///
[HttpPut("{studentID}")]
publicasyncTask>UpdateAsync(intstudentID,[FromBody]Studenteditstudent)
{
varresponse=newApiResponse();
try
{
varstudent=await_studentHelper.QuerySingleAsync(x=>x.StudentID==studentID).ConfigureAwait(false);
if(student!=null)
{
student.Age=editstudent.Age;
student.Name=editstudent.Name;
student.Gender=editstudent.Gender;
student.ClassID=editstudent.ClassID;
intupdateResult=await_studentHelper.UpdateAsync(student).ConfigureAwait(false);
if(updateResult>0)
{
response.Success=true;
response.Message="学生信息更新成功";
}
else
{
response.Success=false;
response.Message="学生信息更新失败";
}
}
else
{
response.Success=false;
response.Message="未找到学生信息";
}
}
catch(Exceptionex)
{
response.Success=false;
response.Message=ex.Message;
}
returnresponse;
}
///
///删除学生记录
///
///学生ID
///
[HttpDelete("{studentID}")]
publicasyncTask>DeleteAsync(intstudentID)
{
varresponse=newApiResponse();
try
{
intdeleteResult=await_studentHelper.DeleteAsync(studentID).ConfigureAwait(false);
if(deleteResult>0)
{
response.Success=true;
response.Message="删除成功";
}
else
{
response.Success=false;
response.Message="未找到学生信息";
}
}
catch(Exceptionex)
{
response.Success=false;
response.Message=ex.Message;
}
returnresponse;
}
}
对应服务注册
在Program.cs
类中:
//注册服务
builder.Services.AddScoped>();
builder.Services.AddScoped>();
Swagger自定义和扩展
Swagger 提供了为对象模型进行归档和自定义 UI 以匹配你的主题的选项。
传递给 AddSwaggerGen 方法的配置操作会添加诸如作者、许可证和说明的信息。在Program.cs
中添加如下Swagger自定义配置:
//添加Swagger服务
builder.Services.AddSwaggerGen(options=>
{
options.SwaggerDoc("v1",newOpenApiInfo
{
Title="EasySQLiteAPI",
Version="V1",
Description=".NET8操作SQLite入门到实战",
Contact=newOpenApiContact
{
Name="GitHub源码地址",
Url=newUri("https://github.com/YSGStudyHards/EasySQLite")
}
});
//获取xml文件名
varxmlFile=$"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
//获取xml文件路径
varxmlPath=Path.Combine(AppContext.BaseDirectory,xmlFile);
//添加控制器层注释,true表示显示控制器注释
options.IncludeXmlComments(xmlPath,true);
//对action的名称进行排序,如果有多个,就可以看见效果了
options.OrderActionsBy(o=>o.RelativePath);
});
项目右键,选择属性,找到生成下面的输出选中生成包含API文档的文件,如下图所示:
注意:关于XML文档文件路径是需要你先勾选上面生成包含API文档的文件的时候运行项目才会生成该项目的XML文档,然后可以把生成的XML文档放到你想要放到的位置。
配置完成查看Swagger API运行效果:
Swagger API调用效果展示
Navicat查看SQLite表数据
注意本文我们的数据库和表都是由代码自动创建生成的,也就是在SQLiteAsyncHelper里面。
创建成功后的数据库:
Navicat查看数据库表数据
DotNetGuide技术社区交流群
- DotNetGuide技术社服务器托管网区是一个面向.NET开发者的开源技术社区,旨在为开发者们提供全面的C#/.NET/.NET Core相关学习资料、技术分享和咨询、项目推荐、招聘资讯和解决问题的平台。
- 在这个社区中,开发者们可以分享自己的技术文章、项目经验、遇到的疑难技术问题以及解决方案,并且还有机会结识志同道合的开发者。
- 我们致力于构建一个积极向上、和谐友善的.NET技术交流平台,为广大.NET开发者带来更多的价值和成长机会。
欢迎加入DotNetGuide技术社区微信交流群
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net