• 七天.NET 8操作SQLite入门到实战 - 第六天后端班级管理相关接口完善和Swagger自定义配置


    前言

    在上一章节我们在后端框架中引入 SQLite-net ORM 并封装常用方法(SQLiteHelper),今天我们的任务是设计好班级管理相关的表、完善后端班级管理相关接口并对Swagger自定义配置。

    七天.NET 8 操作 SQLite 入门到实战详细教程

    EasySQLite 项目源码地址

    GitHub 地址:https://github.com/YSGStudyHards/EasySQLite

    班级管理相关的表设计

    班级表的字段可以包括:

    1. 班级ID(ClassID):用于唯一标识每个班级[主键自增]。
    2. 班级名称(ClassName):班级的名称。
    3. 创建时间(CreateTime):班级创建的时间。

    班级学生表的字段可以包括:

    1. 学生ID(StudentID):用于唯一标识每个学生[主键自增]。
    2. 班级ID(ClassID):所属班级的ID,与班级表中的班级ID相关联。
    3. 姓名(Name):学生的姓名。
    4. 年龄(Age):学生的年龄。
    5. 性别(Gender):学生的性别。

    班级管理相关的表对应模型

    SchoolClass

        public class SchoolClass
        {
            /// 
            /// 班级ID [主键,自动递增]
            /// 
            [PrimaryKey, AutoIncrement]
            public int ClassID { getset; }
    
            /// 
            /// 班级名称
            /// 
            public string ClassName { getset; }
    
            /// 
            /// 创建时间
            /// 
            public DateTime CreateTime { getset; }
        }
    

    Student

        public class Student
        {
            /// 
            /// 学生ID [主键,自动递增]
            /// 
            [PrimaryKey, AutoIncrement]
            public int StudentID { getset; }
    
            /// 
            /// 班级ID
            /// 
            public int ClassID { getset; }
    
            /// 
            /// 学生姓名
            /// 
            public string Name { getset; }
    
            /// 
            /// 学生年龄
            /// 
            public int Age { getset; }
    
            /// 
            /// 学生性别
            /// 
            public string Gender { getset; }
        }
    

    接口统一的响应模型

    为了实现统一的响应模型,这里创建一个名为 ApiResponse的泛型类。

        public class ApiResponse<T>
        {
            /// 
            /// 是否成功
            /// 
            public bool Success { getset; }
    
            /// 
            /// 响应消息
            /// 
            public string Message { getset; }
    
            /// 
            /// 返回的数据
            /// 
            public T Data { getset; }
        }
    

    学校班级管理接口代码

          /// 
        /// 学校班级管理
        /// 
        [ApiController]
        [Route("[controller]")]
        public class SchoolClassController : ControllerBase
        {
            private readonly SQLiteAsyncHelper _schoolClassHelper;
    
            /// 
            /// 依赖注入
            /// 
            /// schoolClassHelper
            public SchoolClassController(SQLiteAsyncHelper schoolClassHelper)
            {
                _schoolClassHelper = schoolClassHelper;
            }
    
            /// 
            /// 班级创建
            /// 
            /// 创建班级信息
            /// 
            [HttpPost]
            public async Taskint>> CreateClass([FromBody] SchoolClass schoolClass)
            {
                try
                {
                    int insertNumbers = await _schoolClassHelper.InsertAsync(schoolClass);
                    if (insertNumbers > 0)
                    {
                        return new ApiResponse<int>
                        {
                            Success = true,
                            Message = "创建班级成功"
                        };
                    }
                    else
                    {
                        return new ApiResponse<int>
                        {
                            Success = false,
                            Message = "创建班级失败"
                        };
                    }
                }
                catch (Exception ex)
                {
                    return new ApiResponse<int>
                    {
                        Success = false,
                        Message = ex.Message
                    };
                }
            }
    
            /// 
            /// 获取所有班级信息
            /// 
            [HttpGet]
            public async Task>> GetClasses()
            {
                try
                {
                    var classes = await _schoolClassHelper.QueryAllAsync().ConfigureAwait(false);
                    return new ApiResponse>
                    {
                        Success = true,
                        Data = classes
                    };
                }
                catch (Exception ex)
                {
                    return new ApiResponse>
                    {
                        Success = false,
                        Message = ex.Message
                    };
                }
            }
    
            /// 
            /// 根据班级ID获取班级信息
            /// 
            /// 班级ID
            /// 
            [HttpGet("{classId}")]
            public async Task> GetClass(int classId)
            {
                try
                {
                    var schoolClass = await _schoolClassHelper.QuerySingleAsync(c => c.ClassID == classId).ConfigureAwait(false);
                    if (schoolClass != null)
                    {
                        return new ApiResponse
                        {
                            Success = true,
                            Data = schoolClass
                        };
                    }
                    else
                    {
                        return new ApiResponse
                        {
                            Success = false,
                            Message = "班级不存在"
                        };
                    }
                }
                catch (Exception ex)
                {
                    return new ApiResponse
                    {
                        Success = false,
                        Message = ex.Message
                    };
                }
            }
    
            /// 
            /// 更新班级信息
            /// 
            /// 班级ID
            /// 更新的班级信息
            /// 
            [HttpPut("{classId}")]
            public async Taskint>> UpdateClass(int classId, [FromBody] SchoolClass updatedClass)
            {
                try
                {
                    var existingClass = await _schoolClassHelper.QuerySingleAsync(c => c.ClassID == classId).ConfigureAwait(false);
    
                    if (existingClass != null)
                    {
                        existingClass.ClassName = updatedClass.ClassName;
                        var updateResult = await _schoolClassHelper.UpdateAsync(existingClass).ConfigureAwait(false);
                        if (updateResult > 0)
                        {
                            return new ApiResponse<int>
                            {
                                Success = true,
                                Message = "班级信息更新成功"
                            };
                        }
                        else
                        {
                            return new ApiResponse<int>
                            {
                                Success = false,
                                Message = "班级信息更新失败"
                            };
                        }
                    }
                    else
                    {
                        return new ApiResponse<int>
                        {
                            Success = false,
                            Message = "班级不存在"
                        };
                    }
                }
                catch (Exception ex)
                {
                    return new ApiResponse<int>
                    {
                        Success = false,
                        Message = ex.Message
                    };
                }
            }
    
            /// 
            /// 班级删除
            /// 
            /// 班级ID
            /// 
            [HttpDelete("{classId}")]
            public async Taskint>> DeleteClass(int classId)
            {
                try
                {
                    var deleteResult = await _schoolClassHelper.DeleteAsync(classId).ConfigureAwait(false);
    
                    if (deleteResult > 0)
                    {
                        return new ApiResponse<int>
                        {
                            Success = true,
                            Message = "班级删除成功"
                        };
                    }
                    else
                    {
                        return new ApiResponse<int>
                        {
                            Success = true,
                            Message = "班级删除失败"
                        };
                    }
                }
                catch (Exception ex)
                {
                    return new ApiResponse<int>
                    {
                        Success = false,
                        Message = ex.Message
                    };
                }
            }
        }
    

    学生管理接口代码

          /// 
        /// 学生管理
        /// 
        [ApiController]
        [Route("[controller]")]
        public class StudentController : ControllerBase
        {
            private readonly SQLiteAsyncHelper _studentHelper;
    
            /// 
            /// 依赖注入
            /// 
            /// studentHelper
            public StudentController(SQLiteAsyncHelper studentHelper)
            {
                _studentHelper = studentHelper;
            }
    
            /// 
            /// 创建新的学生记录
            /// 
            /// 添加的学生信息
            /// 
            [HttpPost]
            public async Taskint>> CreateAsync([FromBody] Student student)
            {
                var response = new ApiResponse<int>();
                try
                {
                    var insertNumbers = await _studentHelper.InsertAsync(student).ConfigureAwait(false);
                    if (insertNumbers > 0)
                    {
                        response.Success = true;
                        response.Message = "添加成功";
                    }
                    else
                    {
                        response.Success = false;
                        response.Message = "插入失败";
                    }
                }
                catch (Exception ex)
                {
                    response.Success = false;
                    response.Message = ex.Message;
                }
                return response;
            }
    
            /// 
            /// 查询所有学生记录
            /// 
            /// 
            [HttpGet]
            public async Task>> GetAllAsync()
            {
                var response = new ApiResponse>();
                try
                {
                    var students = await _studentHelper.QueryAllAsync().ConfigureAwait(false);
                    response.Success = true;
                    response.Data = students;
                }
                catch (Exception ex)
                {
                    response.Success = false;
                    response.Message = ex.Message;
                }
                return response;
            }
    
            /// 
            /// 根据学生ID查询学生信息
            /// 
            /// 学生ID
            /// 
            [HttpGet("{studentID}")]
            public async Task> GetByIdAsync(int studentID)
            {
                var response = new ApiResponse();
                try
                {
                    var student = 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 (Exception ex)
                {
                    response.Success = false;
                    response.Message = ex.Message;
                }
                return response;
            }
    
            /// 
            /// 更新学生记录
            /// 
            /// 学生ID
            /// 更新的学生信息
            /// 
            [HttpPut("{studentID}")]
            public async Taskint>> UpdateAsync(int studentID, [FromBody] Student editstudent)
            {
                var response = new ApiResponse<int>();
                try
                {
                    var student = 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;
    
                        int updateResult = 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 (Exception ex)
                {
                    response.Success = false;
                    response.Message = ex.Message;
                }
                return response;
            }
    
            /// 
            /// 删除学生记录
            /// 
            /// 学生ID
            /// 
            [HttpDelete("{studentID}")]
            public async Taskint>> DeleteAsync(int studentID)
            {
                var response = new ApiResponse<int>();
                try
                {
                    int deleteResult = await _studentHelper.DeleteAsync(studentID).ConfigureAwait(false);
                    if (deleteResult > 0)
                    {
                        response.Success = true;
                        response.Message = "删除成功";
                    }
                    else
                    {
                        response.Success = false;
                        response.Message = "未找到学生信息";
                    }
                }
                catch (Exception ex)
                {
                    response.Success = false;
                    response.Message = ex.Message;
                }
                return response;
            }
        }
    

    对应服务注册

    Program.cs类中:

    // 注册服务
    builder.Services.AddScoped<SQLiteAsyncHelper<SchoolClass>>();
    builder.Services.AddScoped<SQLiteAsyncHelper<Student>>();
    

    Swagger自定义和扩展

    Swagger 提供了为对象模型进行归档和自定义 UI 以匹配你的主题的选项。

    传递给 AddSwaggerGen 方法的配置操作会添加诸如作者、许可证和说明的信息。在 Program.cs 中添加如下Swagger自定义配置:

                // 添加Swagger服务
                builder.Services.AddSwaggerGen(options =>
                {
                    options.SwaggerDoc("v1"new OpenApiInfo
                    {
                        Title = "EasySQLite API",
                        Version = "V1",
                        Description = ".NET 8操作SQLite入门到实战",
                        Contact = new OpenApiContact
                        {
                            Name = "GitHub源码地址",
                            Url = new Uri("https://github.com/YSGStudyHards/EasySQLite")
                        }
                    });
    
                    // 获取xml文件名
                    var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
                    // 获取xml文件路径
                    var xmlPath = 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技术社区微信交流群👪

  • 相关阅读:
    目标追踪拍摄?目标遮挡拍摄?拥有19亿安装量的花瓣app,究竟有什么别出心裁的功能如此吸引用户?
    STL常用容器——String容器的使用
    Android11编译第五弹:开启VPN权限
    Android webView加载高德地图定位不显示问题
    概率论期末复习
    【Unity】升级版·Excel数据解析,自动创建对应C#类,自动创建ScriptableObject生成类,自动序列化Asset文件
    React-18--css in js
    常见数据类型的占用字节数以及类型转换需要注意的事项
    使用 lua 运行 fscript
    基于最小均方误差linear minimum mean square error(LMMSE)插值算法的图像超分辨重构研究-附Matlab代码
  • 原文地址:https://www.cnblogs.com/Can-daydayup/p/17880839.html