【项目学习01_2024.04.27_Day01】

学习笔记

  • 项目学习链接
  • 第2章 内容管理模块v3.1
    • 1 模块需求分析
      • 1.1 什么是需求分析
      • 1.2 模块介绍
      • 1.3 业务流程
      • 1.4 界面原型
    • 2 创建模块工程
      • 2.1 模块工程结构
      • 父工程和子工程之间的继承关系以及工程与工程之间的依赖关系,通俗理解:
      • 2.2 创建模块工程
      • \pom\含义及其功能
    • 3 课程查询
      • 3.1 需求分析
        • 3.1.1 业务流程
        • 3.1.2 数据模型
      • 3.2 创建数据库表及PO类型
        • 3.2.1 创建数据库表
        • 3.2.2 生成PO类
      • 3.3 设计接口
        • 3.3.1 接口设计分析
        • 3.3.2 定义模型类

项目学习链接

第2章 内容管理模块v3.1

1 模块需求分析

1.1 什么是需求分析

在软件工程中,需求分析是软件开发过程中的一个重要阶段,其主要目的是确定用户的需求和期望,将用户的需求转化为可实现的软件功能和规格。需求分析阶段涉及收集、定义、分析和确认用户需求,并将其转化为软件系统的规格说明书,为软件设计和开发提供指导。

需求分析就好比是在买东西之前先确定清楚自己到底需要什么,要买什么样的东西。
比如,你想买一台新手机,你会先考虑自己的需求,比如想要大屏幕、长续航、高像素等功能。
这些需求就相当于软件开发中的用户需求。然后,你会去市场上了解各种手机品牌和型号,比较它们的功能和性能,选择最符合自己需求的手机。这个过程就相当于软件开发中的需求分析,通过和用户沟通、调研市场等方式,确定用户的需求,为后续的软件设计和开发提供指导。
最后,你会购买到符合自己需求的手机,满足了自己的使用需求。而在软件开发中,通过需求分析确定了用户需求后,开发团队就可以按照需求设计和开发出符合用户期望的软件产品,从而实现用户满意度和软件项目的成功。

在这里插入图片描述
在这里插入图片描述

1.2 模块介绍

本项目作为一个大型的在线教育平台,其内容管理模块主要对课程及相关内容进行管理,包括:课程的基本信息、课程图片、课程师资信息、课程的授课计划、课程视频、课程文档等内容的管理。

1.3 业务流程

在这里插入图片描述

1.4 界面原型

产品工程师根据用户需求制作产品界面原型,开发工程师除了根据用户需求进行需求分析以外,还会根据界面原型上的元素信息进行需求分析。

2 创建模块工程

2.1 模块工程结构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
所以模块工程的结构如下图所示:
在这里插入图片描述
xuecheng-plus-content-api:接口工程,为前端提供接口。
xuecheng-plus-content-service: 业务工程,为接口工程提供业务支撑。
xuecheng-plus-content-model: 数据模型工程,存储数据模型类、数据传输类型等。

结合项目父工程、项目基础工程后,如下图:
在这里插入图片描述

父工程和子工程之间的继承关系以及工程与工程之间的依赖关系,通俗理解:

假设你正在建造一座房子,你可以把这个过程比作一个软件项目。在这个过程中,你可能会有一个总的施工图纸,上面包含了整个房子的设计和规划,这个施工图纸就相当于Spring Boot项目中的父工程。
然后,你需要对房子的不同部分进行施工,比如地基、结构、装修等。你可以把每个部分的施工过程看作是一个子工程,每个子工程都有自己的施工图纸,规定了这部分工程的具体要求和设计。
在这个过程中,每个子工程都要遵循总的施工图纸(父工程)的规定,比如地基要承重、结构要牢固、装修要美观。这就是父工程和子工程之间的继承关系,子工程继承了父工程的设计和规划。
此外,有些部分的施工可能依赖于其他部分,比如装修需要等到结构完工后才能开始。这就是工程与工程之间的依赖关系,一个部分的施工依赖于其他部分的完成。
在Spring Boot项目中,父工程提供了一些通用的配置和依赖,子工程可以继承父工程的配置和依赖,同时根据自己的需求进行定制。工程与工程之间的依赖关系则是指不同模块之间的依赖,比如一个模块可能需要调用另一个模块提供的功能。

2.2 创建模块工程

1、首先在项目根目录创建内容管理模块的父工程xuecheng-plus-content
在这里插入图片描述

创建完成,只保留pom.xml文件,删除多余的文件。
内容管理父工程的主要职责是聚合内容管理接口和内容管理接口实现两个工程,它的父工程是xuecheng-plus-parent。

<packaging>pom</packaging>含义及其功能

在Maven项目中,<packaging>pom</packaging>是用来指定项目的打包方式的配置。通俗地讲,它告诉Maven这个项目不是一个可执行的JAR或WAR包,而是一个用来管理其他子模块的父项目。
具体来说,当一个项目的<packaging>配置为pom时,这个项目就是一个聚合项目(aggregator project),它主要用来管理多个模块(子项目),而不会生成任何实际的构建产物(如JAR、WAR等)。这样的父项目通常包含了一些共享的配置、依赖管理等内容,子项目可以继承这些共享内容,从而减少重复工作。
在Maven中,父项目的pom.xml文件中通常会包含一些全局的配置,比如依赖管理、插件配置、版本控制等,子项目则可以继承这些配置,避免重复定义。同时,父项目也可以定义一些聚合的关系,将多个子项目组织在一起,方便统一管理和构建。
总的来说,<packaging>pom</packaging>的作用是告诉Maven这个项目是一个父项目,用来管理多个子项目的配置和依赖关系,而不是生成可执行的构建产物。这样可以提高项目的组织结构和管理效率。

3 课程查询

3.1 需求分析

3.1.1 业务流程

课程查询的业务流程如下:
1、教学机构人员点击课程管理首先进入课程查询界面,如下:
在这里插入图片描述
2.在课程进行列表查询页面输入查询条件查询课程信息
当不输入查询条件时输入全部课程信息。
输入查询条件查询符合条件的课程信息。
约束:本教学机构查询本机构的课程信息。
在这里插入图片描述

3.1.2 数据模型

下边从查询条件、查询列表两个方面分析数据模型
1、查询条件:
包括:课程名称、课程审核状态、课程发布状态
课程名称:可以模糊搜索
课程审核状态:未提交、已提交、审核通过、审核未通过
课程发布状态:未发布、已发布、已下线
因为是分页查询所以查询条件中还要包括当前页码、每页显示记录数。
2、查询结果:
查询结果中包括:课程id、课程名称、任务数、创建时间、是否付费、审核状态、类型,操作
任务数:该课程所包含的课程计划数,即课程章节数。
是否付费:课程包括免费、收费两种。
类型:录播、直播。
因为是分页查询所以查询结果中还要包括总记录数、当前页、每页显示记录数。

3.2 创建数据库表及PO类型

3.2.1 创建数据库表

1、创建内容管理数据库
在这里插入图片描述
2、向创建的内容管理数据库导入数据
选择课程资料中的xc_content.sql脚本,这里使用DataGrid 客户端工具连接mysql并执行脚本。
在这里插入图片描述
执行成功,查询course_base数据表,如下:
在这里插入图片描述

3.2.2 生成PO类

PO即持久对象(Persistent Object),也称为实体类(Entity Class)或数据访问对象(Data Access Object)。它们是由一组属性和属性的get和set方法组成,PO对应于数据库的表。

在开发持久层代码时需要根据数据表编写PO类,在实际开发中通常使用代码生成器(工具)生成PO类的代码。
本项目使用mybatis-plus的generator工程生成PO类、Mapper接口、Mapper的xml文件,地址在:https://github.com/baomidou/generator

将课程资料目录下的xuecheng-plus-generator.zip解压后拷贝至项目工程根目录,如下图:
在这里插入图片描述
打开IDEA将其导入项目工程 ,打开xuecheng-plus-generator工程的pom.xml,右键 点击“Add as Maven Project” 自动识别maven工程。

本次生成内容管理模块的PO类、Mapper接口和Mapper的xml文件 ,找到ContentCodeGenerator类,如下图:
在这里插入图片描述
修改ContentCodeGenerator类中的信息,包括:数据库地址、数据库账号、数据库密码、生成的表、生成路径。
修改完成,执行该类的main方法,自动生成content包,如下:
在这里插入图片描述
在该包下自动生成了内容管理模块的controller、mapper、po及service相关代码,这里我们只需要po类。
将po类拷贝到model工程。
在这里插入图片描述
打开一个PO类发现编译报错,这是缺少依赖包导致,本项目使用的持久层框架是MyBatisPlus,在生成的po类中加了一些MyBatisPlus框架的注解,这里需要添加MyBatisPlus框架的依赖,消除错误。
下边在model工程添加依赖

<dependencies>
        <dependency>
            <groupId>com.xuecheng</groupId>
            <artifactId>xuecheng-plus-base</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <!--存在mybatisplus注解添加相关注解保证不报错-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-annotation</artifactId>
            <version>${mybatis-plus-boot-starter.version}</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-core</artifactId>
            <version>${mybatis-plus-boot-starter.version}</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
</dependencies>

${mybatis-plus-boot-starter.version} 表示用mybatis-plus-boot-starter.version值(父工程中为3.4.1)替换此处,使版本一致。
在这里插入图片描述

3.3 设计接口

3.3.1 接口设计分析

1)协议
通常协议采用HTTP,查询类接口通常为get或post,查询条件较少的使用get,较多的使用post。
本接口使用 http post。
还要确定content-type,参数以什么数据格式提交,结果以什么数据格式响应。
一般情况没有特殊情况结果以json 格式响应。
2)分析请求参数
根据前边对数据模型的分析,请求参数为:课程名称、课程审核状态、当前页码、每页显示记录数。
根据分析的请求参数定义模型类。
3)分析响应结果
根据前边对数据模型的分析,响应结果为数据列表加一些分页信息(总记录数、当前页、每页显示记录数)。
数据列表中数据的属性包括:课程id、课程名称、任务数、创建时间、审核状态、类型。
注意:查询结果中的审核状态为数据字典中的代码字段,前端会根据审核状态代码 找到对应的名称显示。
根据分析的响应结果定义模型类。
4)分析完成,使用SpringBoot注解开发一个Http接口。
5)使用接口文档工具查看接口的内容。
6)接口中调用Service方法完成业务处理。
接口请求示例

POST /content/course/list?pageNo=2&pageSize=1
Content-Type: application/json

{
  "auditStatus": "202002",
  "courseName": "",
  "publishStatus":""
}
###成功响应结果
{
  "items": [
    {
      "id": 26,
      "companyId": 1232141425,
      "companyName": null,
      "name": "spring cloud实战",
      "users": "所有人",
      "tags": null,
      "mt": "1-3",
      "mtName": null,
      "st": "1-3-2",
      "stName": null,
      "grade": "200003",
      "teachmode": "201001",
      "description": "本课程主要从四个章节进行讲解: 1.微服务架构入门 2.spring cloud 基础入门 3.实战Spring Boot 4.注册中心eureka。",
      "pic": "https://cdn.educba.com/academy/wp-content/uploads/2018/08/Spring-BOOT-Interview-questions.jpg",
      "createDate": "2019-09-04 09:56:19",
      "changeDate": "2021-12-26 22:10:38",
      "createPeople": null,
      "changePeople": null,
      "auditStatus": "202002",
      "auditMind": null,
      "auditNums": 0,
      "auditDate": null,
      "auditPeople": null,
      "status": 1,
      "coursePubId": null,
      "coursePubDate": null
    }
  ],
  "counts": 23,
  "page": 2,
  "pageSize": 1
}

3.3.2 定义模型类

根据接口分析需要定义模型类接收请求的参数,并定义模型类用于响应结果。
1、分页查询模型类
由于分页查询这一类的接口在项目较多,这里针对分页查询的参数(当前页码、每页显示记录数)单独在xuecheng-plus-base基础工程中定义。
在这里插入图片描述
2、查询条件模型类
除了分页查询参数,剩下的就是课程查询的特有参数,此时需要在内容管理的model工程中定义课程查询参数模型类。
在这里插入图片描述

3、响应模型类
根据接口分析,下边定义响应结果模型类。
针对分页查询结果经过分析也存在固定的数据和格式,所以在base工程定义一个基础的模型类。
在这里插入图片描述
implements Serializable:这个类实现了Serializable接口,表示该类的对象可以被序列化,即可以在网络上传输或保存到文件中。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/578617.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

go 安装软件报go.mod file not found

执行 go get -u github.com/go-sql-driver/mysql 下载mysql 报错 解决方法: 控制台&#xff1a;输入go env 返回如下&#xff1a; 红圈值为NUL&#xff0c;需要设置GOMOD的值, 然后再控制台执行 &#xff08;1&#xff09;mkdir mod (2)go mod init mod 然后再执行下载&…

AIGC——什么是人工智能生成内容

人工智能生成内容&#xff08;AIGC&#xff09;是当今数字时代的一个引人注目的前沿技术&#xff0c;它借助深度学习和自然语言处理等技术&#xff0c;使计算机系统具备了生成高质量文本、图像、音频等多媒体内容的能力。AIGC的出现不仅推动了信息技术的发展&#xff0c;也在多…

【匹配】匈牙利匹配算法

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 匈牙利匹配算法 1. 正文 1.1 基础概念 二分图 顶点分为两个集合&#xff0c;集合间顶点相连&#xff0c;集合内点不相连 匹配 一个匹配就是一个边的…

Linux基础——Linux开发工具(make/makefile,git)

前言&#xff1a;在经过前面两篇学习&#xff0c;大家对Linux开发工具都有一定的了解&#xff0c;而在此之前最重要的两个工具就是vim&#xff0c;gcc。 如果对这两个工具不太了解&#xff0c;可以先阅读这两篇文章&#xff1a; Linux开发工具 (vim) Linux开发工具 (gcc/g) 首先…

汇智知了堂携手西华大学共探鸿蒙生态发展之路

近日&#xff0c;汇智知了堂有幸走进美丽的西华大学&#xff0c;为师生们带来了一场别开生面的鸿蒙专场讲座。本次讲座旨在深入解析鸿蒙生态的发展前景&#xff0c;增进同学们对鸿蒙系统的认识&#xff0c;同时展示汇智知了堂在产教融合领域的专业实力。 在讲座现场&#xff…

app渗透测试

1.夜神模拟器搭建流程 直接自定义安装 就可以了 如果是androd7本 修改为低于7版本的 调整夜神版本 2.burp设置代理 可以自己指定电脑ip windows cmd ifconfig 设置-添加-指定地址端口 然后导出证书或者在夜神模拟器使用指定的ip加端口访问下载 3.安装证书 如果是导出的…

(学习日记)2024.05.03:UCOSIII第五十七节:User文件夹函数概览(uCOS-III->Source文件夹)第三部分

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

Pytorch 计算深度模型的大小

计算模型大小的方法 卷积 时间复杂度 与 空间复杂度 的计算方式&#xff1a; C 通道的个数&#xff0c;K卷积核大小&#xff0c;M特征图大小&#xff0c;C_l-1是输入通道的个数&#xff0c;C_l是输出通道的个数 1 模型大小 MB 计算模型的大小的原理就是计算保存模型所需要…

嵌入式全栈开发学习笔记---Linux基本命令2

目录 cp 源路径 目的路径 cp -r 源路径 目的路径 mv 源路径 目的路径 mv oldname newname 接下来我们继续介绍两个常用的命令 一个是拷贝文件&#xff0c;一个是剪切文件 &#xff0c;或者也可以用来改名字。 cp 源路径 目的路径 “cp”用来拷贝文件或者目录&#xff0c;…

jpa分页插件对象Pageable出现了错误异常如何解决?

jpa分页插件对象Pageable出现了错误异常如何解决&#xff1f;&#xff01; 一般来说&#xff0c;遇到这种的错误异常情况&#xff0c;通常情况 下&#xff0c;都是因为程序员把传递的分页页码数字写错了。 正常情况下&#xff0c;分页页码起始数字应该是0&#xff1b;而不是1…

【研发管理】产品经理知识体系-产品创新中的市场调研

导读&#xff1a;在产品创新过程中&#xff0c;市场调研的重要性不言而喻。它不仅是产品创新的起点&#xff0c;也是确保产品成功推向市场的关键步骤。对于产品经理系统学习和掌握产品创新中的市场调研相关知识体系十分重要。 目录 概述&#xff1a;市场调研重要性 1、相关概…

Python脚本:论文必备!给PDF指定页面后添加空白页

一、代码 直接上代码 import PyPDF2,os from datetime import datetimedef add_blank_pages(pdf_path, page_numbers):pdf_writer PyPDF2.PdfWriter()timestamp datetime.now().strftime("%Y%m%d%H%M%S")# 读取PDF文件with open(pdf_path, rb) as pdf_file:pdf_r…

【Java EE】Spring核心思想(一)——IOC

文章目录 &#x1f38d;Spring 是什么&#xff1f;&#x1f384;什么是IoC呢&#xff1f;&#x1f338;传统程序开发&#x1f338;传统程序开发的缺陷&#x1f338;如何解决传统程序的缺陷&#xff1f;&#x1f338;控制反转式程序开发&#x1f338;对比总结 &#x1f332;理解…

Kafka学习笔记01【2024最新版】

一、Kafka-课程介绍 官网地址&#xff1a;Apache KafkaApache Kafka: A Distributed Streaming Platform.https://kafka.apache.org/ kafka 3.6.1版本&#xff0c;作为经典分布式订阅、发布的消息传输中间件&#xff0c;kafka在实时数据处理、消息队列、流处理等领域具有广泛…

检测水箱水位传感器有哪些?

生活中很多家电中都内含一个水箱&#xff0c;例如电蒸锅、饮水机、蒸汽熨斗、咖啡机等等&#xff0c;这些内部都有水箱&#xff0c;或大或小。当然水箱也有很多种类型&#xff0c;例如生活水箱、生产水箱、消防水箱等等。 把水储存在水箱中也会遇到这些问题&#xff0c;水箱没…

JavaScript云LIS系统源码 前端框架JQuery+EasyUI+后端框架MVC+SQLSuga大型医院云LIS检验系统源码 可直接上项目

JavaScript云LIS系统源码 前端框架JQueryEasyUI后端框架MVCSQLSuga大型医院云LIS检验系统源码 可直接上项目 云LIS系统概述&#xff1a; 云LIS是为区域医疗提供临床实验室信息服务的计算机应用程序&#xff0c;可协助区域内所有临床实验室相互协调并完成日常检验工作&#xff…

pytest-asyncio:协程异步测试案例

简介&#xff1a;pytest-asyncio是一个pytest插件。它便于测试使用异步库的代码。具体来说&#xff0c;pytest-asyncio提供了对作为测试函数的协同程序的支持。这允许用户在测试中等待代码。 历史攻略&#xff1a; asyncio并发访问websocket Python&#xff1a;协程 - 快速创…

SVGDreamer: 文本引导矢量图形合成

现有的 Text-to-SVG 方法还存在两个限制&#xff1a;1.生成的矢量图缺少编辑性&#xff1b;2. 难以生成高质量和多样性的结果。为了解决这些限制&#xff0c;作者提出了一种新的文本引导矢量图形合成方法&#xff1a;SVGDreamer。 论文题目&#xff1a; SVGDreamer: Text Guid…

《Git---Windows Powershell提交信息中文乱码解决方案》

解释&#xff1a; Windows PowerShell中的Git乱码通常是因为字符编码不正确或Git配置不支持Windows系统的默认编码导致的。Git在处理文件时可能使用UTF-8编码&#xff0c;而Windows系统的命令行工具&#xff08;如PowerShell&#xff09;默认使用的是Windows-1252或GBK编码。 …

【库函数】Linux下动态库.so和静态库.a的生成和使用

目录 &#x1f31e;1. Linux下静态库和动态库的基本概念 &#x1f31e;2. 动态库 &#x1f30a;2.1 动态库如何生成 &#x1f30d;2.1.1 文件详情 &#x1f30d;2.1.2 编译生成动态库 &#x1f30a;2.2 动态库如何使用 &#x1f30d;2.2.1 案例 &#x1f30d;2.2.2 动态…