跳到主要内容
Java 项目实战:尚庭公寓单体架构开发与部署 | 极客日志
Java java
Java 项目实战:尚庭公寓单体架构开发与部署 尚庭公寓单体架构项目实战教程,涵盖从环境搭建到生产部署的全流程。技术栈包括 Spring Boot 3.0.5、MyBatis-Plus、Knife4j、MinIO 对象存储及 JWT 认证。内容涉及 Web 模块配置、数据库初始化、基础 CRUD 接口开发、文件上传实现、全局异常处理、前后端联调以及 Nginx 反向代理部署。旨在帮助开发者掌握企业级 Java 应用的核心开发模式与运维方案。
开源信徒 发布于 2026/3/16 更新于 2026/5/29 19 浏览Java 项目实战:尚庭公寓单体架构开发与部署
一、前期准备
1、课程简介
项目介绍
前期准备
安装 MySQL
初始化数据库
安装 Maven 并配置阿里云镜像仓库
安装 JDK 17
安装 IDEA
二、笔记总结
1、IDEA 创建项目
2、父工程添加版本管理依赖
<parent >
<groupId > org.springframework.boot</groupId >
< > spring-boot-starter-parent
3.0.5
17
17
UTF-8
3.5.3.1
2.9.2
0.11.2
1.6.2
8.2.0
4.1.0
2.0.23
com.baomidou
mybatis-plus-boot-starter
${mybatis-plus.version}
com.github.xiaoymin
knife4j-openapi3-jakarta-spring-boot-starter
${knife4j.version}
io.jsonwebtoken
jjwt-api
${jwt.version}
io.jsonwebtoken
jjwt-impl
runtime
${jwt.version}
io.jsonwebtoken
jjwt-jackson
runtime
${jwt.version}
com.github.whvcse
easy-captcha
${easycaptcha.version}
io.minio
minio
${minio.version}
com.aliyun
dysmsapi20170525
${aliyun.sms.version}
artifactId
</artifactId >
<version >
</version >
</parent >
<properties >
<maven.compiler.source >
</maven.compiler.source >
<maven.compiler.target >
</maven.compiler.target >
<project.build.sourceEncoding >
</project.build.sourceEncoding >
<mybatis-plus.version >
</mybatis-plus.version >
<swagger.version >
</swagger.version >
<jwt.version >
</jwt.version >
<easycaptcha.version >
</easycaptcha.version >
<minio.version >
</minio.version >
<knife4j.version >
</knife4j.version >
<aliyun.sms.version >
</aliyun.sms.version >
</properties >
<dependencyManagement >
<dependencies >
<dependency >
<groupId >
</groupId >
<artifactId >
</artifactId >
<version >
</version >
</dependency >
<dependency >
<groupId >
</groupId >
<artifactId >
</artifactId >
<version >
</version >
</dependency >
<dependency >
<groupId >
</groupId >
<artifactId >
</artifactId >
<version >
</version >
</dependency >
<dependency >
<groupId >
</groupId >
<artifactId >
</artifactId >
<scope >
</scope >
<version >
</version >
</dependency >
<dependency >
<groupId >
</groupId >
<artifactId >
</artifactId >
<scope >
</scope >
<version >
</version >
</dependency >
<dependency >
<groupId >
</groupId >
<artifactId >
</artifactId >
<version >
</version >
</dependency >
<dependency >
<groupId >
</groupId >
<artifactId >
</artifactId >
<version >
</version >
</dependency >
<dependency >
<groupId >
</groupId >
<artifactId >
</artifactId >
<version >
</version >
</dependency >
</dependencies >
</dependencyManagement >
3、web_admin 模块引入 web 依赖
<dependency >
<groupId > org.springframework.boot</groupId >
<artifactId > spring-boot-starter-web</artifactId >
</dependency >
<dependency >
<groupId > org.springframework.boot</groupId >
<artifactId > spring-boot-starter-test</artifactId >
<scope > test</scope >
</dependency >
<build >
<plugins >
<plugin >
<groupId > org.springframework.boot</groupId >
<artifactId > spring-boot-maven-plugin</artifactId >
</plugin >
</plugins >
</build >
4、web_admin 模块创建 yml 配置文件,创建启动类 在 web_admin 模块 的 src/main/resources 目录下创建 application.yml 配置文件,内容如下:
在 web_admin 模块 下创建 com.yangjunbo.lease.AdminWebApplication 类,内容如下:
@SpringBootApplication
public class AdminWebApplication {
public static void main (String[] args) {
SpringApplication.run(AdminWebApplication.class, args);
}
}
5、引入 Mybatis-Plus 在 common 模块 的 pom.xml 文件中增加如下内容:
<dependency >
<groupId > com.baomidou</groupId >
<artifactId > mybatis-plus-boot-starter</artifactId >
</dependency >
<dependency >
<groupId > com.mysql</groupId >
<artifactId > mysql-connector-j</artifactId >
</dependency >
在 model 模块的 pom.xml 文件中增加如下内容:
<dependency >
<groupId > com.baomidou</groupId >
<artifactId > mybatis-plus-boot-starter</artifactId >
</dependency >
在 web_admin 模块 的 application.yml 文件增加如下内容:
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
url: jdbc:mysql://<hostname>:<port>/<database>?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2b8
username: <username>
password: <password>
hikari:
connection-test-query: SELECT 1
connection-timeout: 60000
idle-timeout: 500000
max-lifetime: 540000
maximum-pool-size: 12
minimum-idle: 10
pool-name: SPHHikariPool
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
在 common 模块 下创建 com.yangjunbo.lease.common.mybatisplus.MybatisPlusConfiguration 类,内容如下:
@Configuration
@MapperScan("com.atguigu.lease.web.*.mapper")
public class MybatisPlusConfiguration {}
6、引入 Knife4j 在 web 模块 的 pom.xml 文件添加如下内容:
<dependency >
<groupId > com.github.xiaoymin</groupId >
<artifactId > knife4j-openapi3-jakarta-spring-boot-starter</artifactId >
</dependency >
在 model 模块 的 pom.xml 文件添加上述内容:
<dependency >
<groupId > com.github.xiaoymin</groupId >
<artifactId > knife4j-openapi3-jakarta-spring-boot-starter</artifactId >
</dependency >
在 web-admin 模块 下创建 com.yangjunbo.lease.web.admin.custom.config.Knife4jConfiguration 类,内容如下:
@Configuration
public class Knife4jConfiguration {
@Bean
public OpenAPI customOpenAPI () {
return new OpenAPI ().info(new Info ().title("后台管理系统 API" ).version("1.0" ).description("后台管理系统 API" ));
}
@Bean
public GroupedOpenApi systemAPI () {
return GroupedOpenApi.builder().group("系统信息管理" ).pathsToMatch("/admin/system/**" ).build();
}
@Bean
public GroupedOpenApi loginAPI () {
return GroupedOpenApi.builder().group("后台登录管理" ).pathsToMatch("/admin/login/**" ,"/admin/info" ).build();
}
@Bean
public GroupedOpenApi apartmentAPI () {
return GroupedOpenApi.builder().group("公寓信息管理" ).pathsToMatch("/admin/apartment/**" ,"/admin/room/**" ,"/admin/label/**" ,"/admin/facility/**" ,"/admin/fee/**" ,"/admin/attr/**" ,"/admin/payment/**" ,"/admin/region/**" ,"/admin/term/**" ,"/admin/file/**" ).build();
}
@Bean
public GroupedOpenApi leaseAPI () {
return GroupedOpenApi.builder().group("租赁信息管理" ).pathsToMatch("/admin/appointment/**" ,"/admin/agreement/**" ).build();
}
@Bean
public GroupedOpenApi userAPI () {
return GroupedOpenApi.builder().group("平台用户管理" ).pathsToMatch("/admin/user/**" ).build();
}
}
7、导入基础代码 先把项目中的包名 com.yangjunbo 改成 com.atguigu,然后使用课件中提供到生成好的基础代码,继续开发。如何使用插件生成基础代码,后续再研究,先继续往下学习。
8、导入接口定义代码
9、支付方式查询列表
10、保存或更新支付方式
11、删除支付方式
12、租期管理
13、标签查询列表
14、自定义 converter
15、自定义 converterFactory
16、EnumbValue 和 JsonValue 注解
17、标签保存更新删除
18、配套管理
19、基本属性概述
20、保存或更新属性名称属性值
21、基本属性查询列表
22、基本属性删除
23、公寓管理杂费
24、公寓管理地区信息
25、上传图片概述
26、配置 MinioClient
27、上传图片接口实现
28、上传图片异常处理
29、Spring 全局异常处理
30、公寓信息概述
31、公寓信息保存或更新定义
32、公寓信息保存或更新实现
33、公寓信息分页查询概述
34、公寓信息分页查询实现
35、公寓信息详情查询定义
36、公寓信息详情查询实现
37、公寓信息删除实现
38、公寓信息删除完善
39、公寓信息剩余接口
40、房间信息概述
41、房间信息测试
42、看房预约修改状态
43、看房预约分页查询
44、时间格式时区
45、租约概述
46、租约保存或更新
47、租约剩余接口
48、租约定时任务
49、用户管理
50、岗位管理
51、用户信息概述
52、用户信息分页查询
53、根据 ID 查询用户信息
54、用户信息保存或更新
55、用户信息剩余接口
56、租约信息分页查询
57、登录管理认证方案
58、JWT 概述
59、登录流程
60、获取验证码准备工作
61、获取验证码实现
62、登录接口上
63、登录接口下
64、登录管理拦截器
65、查询登录用户信息
66、前后端联调
67、移动端项目初始化
68、登录管理交互流程
69、获取短信验证码上
70、获取短信验证码下
71、注册和登录
72、获取个人信息
73、找房、地区、支付方式接口
74、分页查询房间列表
75、找房剩余接口
76、查询浏览历史接口
77、保存浏览历史接口
78、看房预约接口
79、租约管理接口
80、前后端联调
81、缓存优化
82、部署方案
83、Nginx 快速入门概述
84、Nginx 快速入门案例实操
85、配置域名映射
86、部署后端项目
87、部署前端项目 相关免费在线工具 Keycode 信息 查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
Escape 与 Native 编解码 JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
JavaScript / HTML 格式化 使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
JavaScript 压缩与混淆 Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online