目录
课程项目实施主要侧重在后端(Back End)开发部分,如图所示:
编译通过后,即可通过访问http://localhost:/swagger-ui/index.html#/hello-controller
Web应用开发是一个热门且具有广阔就业前景的领域。随着互联网的普及和数字化转型的不断加速,越来越多的企业和组织需要建立和维护自己的网站和Web应用程序。
需求增加:随着互联网的普及,企业和组织对于网站和Web应用的需求不断增加,这为Web应用开发人员提供了丰富的就业机会。
移动化需求:移动互联网的兴起使得移动应用开发成为一个热门领域。许多公司需要开发适用于不同平台的移动应用程序,这为具备移动应用开发技能的人员提供了更多的就业机会。
技术变化迅速:Web应用开发是一个快速变化的领域,新的技术和框架层出不穷。持续学习和更新自己的技能是非常重要的,以跟上行业的发展并保持竞争力。
多样化的就业机会:Web应用开发人员可以在各行各业中找到就业机会,如IT公司、互联网企业、金融机构、媒体公司等。同时,他们还可以选择自由职业,成为独立的Web开发者或接受委托项目。
创新机会:Web应用开发还为人们提供了参与创新项目的机会。通过开发新的Web应用程序,人们可以推动技术的进步和社会的发展,为用户带来全新的体验和价值。
总而言之,Web应用开发是一个充满机会和挑战的领域。拥有相关技能的人员有望在这个领域中找到稳定的就业机会,并有机会参与到创新的项目中。持续学习和积累经验是成为一名优秀的Web应用开发人员的关键。
一、项目背景
本项目是采用前后端项目架构实现的“学生课程习题集”系统。主要聚焦系统后端实现,学生可从学习过程中学习系统架构、Spring Boot前后端分离开发、业务流程分析、各中技术的集成等相关知识。而且,由于使用的是前后端分离开发,所以学生也可以为后续项目扩展打好基础,进一步学习相关的技术完成知识储备。
二、项目需求分析
本项目开发的最终用户分别为教师、学生及系统管理人员,项目包含课程管理、习题管理、题目管理、用户管理、权限管理等模块,提供了基础的CRUD、课程注册及审批、题目下载及发布……等功能。
仅确认开发项目需要的模块及功能。
三、项目技术
- Spring Boot Web
- Spring Boot DevTools
- Spring Boot集成AlibabaDruid
- Spring Data JPA
- Spring Boot集成Redis
- Spring Security
- Spring Cache
- CommonFileUpload
四、项目架构
课程项目实施主要侧重在后端(Back End)开发部分,如图所示:
五、前/后端分离架构
目前80%以上的应用项目开发均采用此种开发模式,因为此种开发模式退可以all in one,进可以完成微服务改造
一般中小型企业项目开发,从成本评估来说不会直接上微服务,所以一般会使用可进可退的前后端分离开发架构,既可以节约成本,也可以为后续项目扩展和改造奠定基础。
六、环境配置
需要准备的环境
- Spring boot 2.x需要JDK 1.8.0_201(以上版本), Spring boot3.x需要JDK17
- Apache Maven 3.6.0(以上版本)
- IntelliJ IDEA Ultimate旗舰版
JDK环境准备
Java Development Kit,Oracle公司提供的Java开发工具包,包含了JRE(Java Runtime Environment)。建议使用JDK1.8版本。
Jpa
JavaPersistenceAPI,Java的持久层API,Jpa定义了一系列标准,让实体类和数据库中的表建立
对应关系。Jpa的实现思想是ORM(ObjectRelationMapping),对象关系映射,用于在关系数据库和业务实体对象之间作映射。
Jpa不是一个具体的框架,是一类框架的总称,持久层框架Hibernate是Jpa的一个具体实现,
springdatajpa是在Hibernate基础之上的封装实现。
springdatajpa的集成开发,可以规避sql语句的编写,侧重于java编码实现,另一个数据库层框
架mybatis则是比较专注sql语句。
Jpa配置
spring:
# 配置数据源
datasource:
driver-class-name:com.mysql.cj.jdbc.Driver
url:jdbc:mysql://localhost:3306/dev_practices?characterEncoding=UTF-
8&userSSL=false&serverTimezone=UTC%2B8
username:root
password:123456
jpa:
#JPA配置,hibernate.ddl-auto,完成自动建表规则的设置,并确认是否打印sql,便于console
查看定位
hibernate:
ddl-auto:update
show-sql:true
server:
port:8081
# 日志处理为展示mybatis运行sql语句
logging:
level:
cn.edu.lzzy:debug
file:
name:dev.log
引入依赖
/pom.xml配置如下:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.14</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--H2Database为开源嵌入式数据库引擎,提供便捷的web控制台用于操作和管理数据库内容,可以兼容
主流数据库-->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
Spring data jpa提供注解
用户信息维护
1.新增用户
2.更新用户信息
3.根据ID获取用户信息
4.根据用户ID删除用户信息
5.获取用户信息
6.分页查询用户信息列表
基础页面维护
1.新增基础页面
1)BaseUrlController
@PostMapping("/add")
public Result<?> addBaseUrl(@RequestBody BaseUrl baseUrl){
baseUrlService.save(baseUrl);
return Result.success("新增基础页面成功");
}
测试:
2.更新基础页面
1)BaseUrlController
@PutMapping("/update")
public Result<?> updateBaseUrl(@RequestBody BaseUrl baseUrl) {
int num;
try {
num = baseUrlService.myUpdateBaseUrl(baseUrl);
} catch (Exception e) {
return Result.fail("", "更新基础页面失败!" + e.toString());
}
return Result.success(num, "更新基础页面成功!");
}
2)IBaseUrlService
int myUpdateBaseUrl(BaseUrl baseUrl); //这里的方法名称和mapper接口方法名称可以一样也可以不一样
3)BaseUrlServiceImpl
@Resource
BaseUrlMapper baseUrlMapper ;
@Override
public int myUpdateBaseUrl(BaseUrl baseUrl) {
int num = baseUrlMapper.updateBaseUrl(baseUrl);
return num;
}
4)BaseUrlMapper
int updateBaseUrl(BaseUrl baseUrl);
5)BaseUrlMapper.xml
<!-- sql语句字段不区分大小写,但是变量名区分-->
<update id="updateBaseUrl" parameterType="BaseUrl">
update base_Url set description = #{description} where mainPage = #{mainPage}
</update>
测试:
{
"mainPage":"http://127.0.0.1:8082/index.html",
"rootlink":"myrootlink",
"num": "1",
"level":"1",
"leaflink":"myleaflink",
"description":"mydescription"
}
3.根据主页查询基础页面信息
1)BaseUrlController
/**
* 根据主页查询基础页面信息
* @param mainPage
* @return 基础页面信息
*/
@GetMapping("getByMainPage")
public Result<List<BaseUrl>> qryBaseUrl(String mainPage){
List<BaseUrl> urlList = null ;
try{
urlList = baseUrlService.mySelectByMainPage(mainPage);
}catch (Exception e) {
return Result.fail(urlList,"查询失败"+e.toString());
}
return Result.success(urlList, "查询基础页面成功!");
}
2)IBaseUrlService
List<BaseUrl> mySelectByMainPage(String mainPage);
3)BaseUrlServiceImpl
@Override
public List<BaseUrl> myselectByMainPage(String mainPage) {
return baseUrlMapper.selectByMainPage(mainPage);
}
4)BaseUrlMapper
List<BaseUrl> selectByMainPage(String mainPage);
5)BaseUrlMapper.xml
<select id="selectByMainPage" resultType="BaseUrl">
select * from base_url where mainPage = #{mainPage}
</select>
测试:
4.根据多条件查询基础页面信息
1)BaseUrlController
/**
* 根据条件查询基础页面信息
* @param baseUrl
* @return
*/
@GetMapping("/get")
public Result<List<BaseUrl>> selectBaseUrl(@RequestBody BaseUrl baseUrl){
List<BaseUrl> list = baseUrlService.mySelectBaseUrl(baseUrl);
return Result.success(list,"查询成功!");
}
2)IBaseUrlService
List<BaseUrl> mySelectBaseUrl(BaseUrl baseUrl);
3)BaseUrlServiceImpl
@Override
public List<BaseUrl> selectBaseUrl(BaseUrl baseUrl) {
return baseUrlMapper.mySelectBaseUrl(baseUrl);
}
4)BaseUrlMapper
List<BaseUrl> selectBaseUrl(BaseUrl baseUrl);
5)BaseUrlMapper.xml
<select id="selectBaseUrl" resultType="BaseUrl" parameterType="BaseUrl">
select *
from base_url
where 1 = 1
<if test="mainPage != null">and mainPage = #{mainPage}</if>
<if test="rootlink != null">and rootlink = #{rootlink}</if>
<if test="num != null">and num = #{num}</if>
<if test="level != null">and level = #{level}</if>
<if test="leaflink != null">and leaflink = #{leaflink}</if>
</select>
测试:
{
"mainPage":"http://127.0.0.1:8082/index.html",
// "rootlink":"https://www.example.com/page3",
// "num":1,
"level":4
// "leaflink":"https://www.iana.org/domains/example"
}
什么是Swagger?
Swagger是一个规范和完整的文档框架。用于生成、描述、调用RESTful风格的Web服务文档,并实现可视化。其官网地址:API Documentation & Design Tools for Teams | Swagger
Spring Boot整合Swagger
在pom.xml进行依赖引入:
创建Swagger配置类:
修改Spring MVC默认路径匹配策略:
由于Spring Boot 2.6以后会将Spring MVC默认路径匹配策略从AntPathMatcher更改为PathPatterParser,所以需要修改Spring MVC默认路径匹配策略,以免报出异常。
修改全局配置文件,添加以下内容:
在启动类添加Swagger3注解:
Swagger使用方法:
编译通过后,即可通过访问http://localhost:<port>/swagger-ui/index.html#/hello-controller
Tips:注意自己的连接地址和端口号。
效果如图所示:
Swagger整合实现:
基于分工明确,高效研发原则,项目开发经常采用前后端分离方案。后端工程师只负责后端开发,但开发过程中,前端工程师经常需要从后端API提取数据,通过联调方式完成项目开发工作。前端工程师与后端工程师进行沟通和联调是,需要后端工程师提供完整的接口文档,此时后端工程师往往会通过一些技术手段,达到代码即文档的目的。Swagger就是可以实现接口数据可视化的工具。
学习小结
Web应用开发是一个热门且具有广阔就业前景的领域。随着互联网的普及和数字化转型的不断加速,越来越多的企业和组织需要建立和维护自己的网站和Web应用程序。
以下是对Web应用开发的总结:
-
需求增加:随着互联网的普及,企业和组织对于网站和Web应用的需求不断增加,这为Web应用开发人员提供了丰富的就业机会。
-
移动化需求:移动互联网的兴起使得移动应用开发成为一个热门领域。许多公司需要开发适用于不同平台的移动应用程序,这为具备移动应用开发技能的人员提供了更多的就业机会。
-
技术变化迅速:Web应用开发是一个快速变化的领域,新的技术和框架层出不穷。持续学习和更新自己的技能是非常重要的,以跟上行业的发展并保持竞争力。
-
多样化的就业机会:Web应用开发人员可以在各行各业中找到就业机会,如IT公司、互联网企业、金融机构、媒体公司等。同时,他们还可以选择自由职业,成为独立的Web开发者或接受委托项目。
-
创新机会:Web应用开发还为人们提供了参与创新项目的机会。通过开发新的Web应用程序,人们可以推动技术的进步和社会的发展,为用户带来全新的体验和价值。