基于 Spring Boot 的酒店管理系统设计与实现
介绍基于 Spring Boot、MyBatis Plus、MySQL 和 Redis 技术栈构建酒店管理系统后端的完整流程。涵盖需求分析、表结构设计、接口定义及源码生成。重点展示了用户权限管理、客房状态监控、预订入住退房及财务统计等核心功能模块的实现细节,并包含 JWT 安全增强与 Druid 连接池优化方案,提供可直接运行的项目结构与 API 文档参考。

介绍基于 Spring Boot、MyBatis Plus、MySQL 和 Redis 技术栈构建酒店管理系统后端的完整流程。涵盖需求分析、表结构设计、接口定义及源码生成。重点展示了用户权限管理、客房状态监控、预订入住退房及财务统计等核心功能模块的实现细节,并包含 JWT 安全增强与 Druid 连接池优化方案,提供可直接运行的项目结构与 API 文档参考。

酒店管理系统后端技术选型建议采用 Spring Boot + MyBatis Plus + MySQL + Redis 的经典组合:使用 Spring Boot 作为主框架提供快速开发和自动配置能力,集成 Spring Security 实现用户认证和权限控制;数据持久层采用 MyBatis Plus 简化 CRUD 操作和复杂查询;MySQL 8.0 作为主数据库存储客房、订单、客户等核心业务数据;Redis 用于缓存热点数据(如房间状态、用户会话)和实现分布式锁;同时整合 Swagger 生成 API 文档,使用 Maven 进行项目管理。
采用 Spring Boot + MyBatis Plus + MySQL + Redis 技术架构,实现用户权限管理、客房状态监控、预订流程处理、入住退房管理和财务结算统计等核心功能模块,通过 B/S 架构设计支持多角色协同操作,具备实时数据缓存、接口文档自动生成、安全认证等特性,系统要求响应时间不超过 3 秒、支持 100+ 并发用户访问。
根据需求分析确定系统边界与功能范围。
定义 RESTful API 规范,明确请求方法与返回结构。
主要包含以下数据表:
user_info 用户信息表role_info 角色信息表permission_info 权限信息表user_role_relation 用户角色关联表role_permission_relation 角色权限关联表room_info 客房信息表booking_info 预定信息表checkin_info 入住登记信息表bill_info 账单信息表CREATE TABLE user_info (
user_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '用户唯一标识',
username VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名',
password VARCHAR(100) NOT NULL COMMENT '用户密码(加密存储)',
email VARCHAR(100) COMMENT '用户邮箱',
phone VARCHAR(20) COMMENT '用户手机号',
status TINYINT DEFAULT 1 COMMENT '用户状态:1 正常,0 禁用',
create_by VARCHAR(50) COMMENT '创建人',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_by VARCHAR(50) COMMENT '修改人',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间'
) COMMENT='用户信息表';
CREATE TABLE role_info (
role_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '角色唯一标识',
role_name VARCHAR(50) NOT NULL UNIQUE COMMENT '角色名称',
role_desc TEXT COMMENT '角色描述',
status TINYINT DEFAULT 1 COMMENT '角色状态:1 启用,0 禁用',
create_by VARCHAR(50) COMMENT '创建人',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_by VARCHAR(50) COMMENT '修改人',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间'
) COMMENT='角色信息表';
CREATE TABLE permission_info (
permission_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '权限唯一标识',
permission_name VARCHAR(100) NOT NULL UNIQUE COMMENT '权限名称',
permission_code VARCHAR(100) NOT NULL UNIQUE COMMENT '权限编码',
permission_type TINYINT COMMENT '权限类型:1 菜单,2 按钮,3 接口',
parent_id BIGINT DEFAULT 0 COMMENT '父级权限 ID',
url VARCHAR(200) COMMENT '权限对应的 URL 路径',
method VARCHAR(10) COMMENT '请求方法:GET、POST 等',
status TINYINT DEFAULT 1 COMMENT '权限状态:1 启用,0 禁用',
create_by VARCHAR(50) COMMENT '创建人',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_by VARCHAR(50) COMMENT '修改人',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间'
) COMMENT='权限信息表';
CREATE TABLE user_role_relation (
relation_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '关联关系唯一标识',
user_id BIGINT NOT NULL COMMENT '用户 ID',
role_id BIGINT NOT NULL COMMENT '角色 ID',
create_by VARCHAR(50) COMMENT '创建人',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
) COMMENT='用户角色关联表';
CREATE TABLE role_permission_relation (
relation_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '关联关系唯一标识',
role_id BIGINT NOT NULL COMMENT '角色 ID',
permission_id BIGINT NOT NULL COMMENT '权限 ID',
create_by VARCHAR(50) COMMENT '创建人',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
) COMMENT='角色权限关联表';
CREATE TABLE room_info (
room_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '房间唯一标识',
room_number VARCHAR(20) NOT NULL UNIQUE COMMENT '房间编号',
room_type VARCHAR(50) COMMENT '房间类型',
bed_type VARCHAR(50) COMMENT '床型',
price DECIMAL(10,2) COMMENT '房间价格',
status TINYINT DEFAULT 0 COMMENT '房间状态:0 空闲,1 已预订,2 入住中,3 维修中',
description TEXT COMMENT '房间描述',
create_by VARCHAR(50) COMMENT '创建人',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_by VARCHAR(50) COMMENT '修改人',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间'
) COMMENT='客房信息表';
CREATE TABLE booking_info (
booking_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '预订记录唯一标识',
user_id BIGINT NOT NULL COMMENT '下单用户 ID',
room_id BIGINT NOT NULL COMMENT '房间 ID',
check_in_date DATE COMMENT '入住日期',
check_out_date DATE COMMENT '退房日期',
guest_count INT DEFAULT 1 COMMENT '入住人数',
total_amount DECIMAL(10,2) COMMENT '总金额',
booking_status TINYINT DEFAULT 0 COMMENT '预订状态:0 待确认,1 已确认,2 已取消',
remark TEXT COMMENT '备注说明',
create_by VARCHAR(50) COMMENT '创建人',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_by VARCHAR(50) COMMENT '修改人',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间'
) COMMENT='预订信息表';
CREATE TABLE checkin_info (
checkin_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '入住记录唯一标识',
booking_id BIGINT NOT NULL COMMENT '对应预订 ID',
user_id BIGINT NOT NULL COMMENT '入住用户 ID',
room_id BIGINT NOT NULL COMMENT '房间 ID',
check_in_time DATETIME COMMENT '实际入住时间',
check_out_time DATETIME COMMENT '预计退房时间',
actual_checkout_time DATETIME COMMENT '实际退房时间',
total_days INT COMMENT '入住天数',
final_amount DECIMAL(10,2) COMMENT '最终结算金额',
status TINYINT DEFAULT 1 COMMENT '入住状态:1 进行中,2 已完成,3 异常',
create_by VARCHAR(50) COMMENT '创建人',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_by VARCHAR(50) COMMENT '修改人',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间'
) COMMENT='入住登记信息表';
CREATE TABLE bill_info (
bill_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '账单唯一标识',
user_id BIGINT NOT NULL COMMENT '用户 ID',
order_id BIGINT NOT NULL COMMENT '订单 ID(如 booking_id 或 checkin_id)',
amount DECIMAL(10,2) COMMENT '账单金额',
bill_type TINYINT COMMENT '账单类型:1 预订费用,2 住宿费用,3 其他费用',
payment_status TINYINT DEFAULT 0 COMMENT '支付状态:0 未支付,1 已支付',
remark TEXT COMMENT '账单备注',
create_by VARCHAR(50) COMMENT '创建人',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_by VARCHAR(50) COMMENT '修改人',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间'
) COMMENT='账单信息表';
实现 Controller、Service、Repository 分层架构,完成业务逻辑封装。
项目采用标准 Maven 结构,依赖管理清晰。
这是一个典型的基于 Spring Boot 框架的 Java Web 项目结构,采用分层架构(如 Controller-Service-Repository)和 Maven 进行依赖管理。打开项目后配置 JDK 和 Maven 环境。将 SQL 导入到数据库中,成功导入依赖后即可运行项目。
在开发过程中对 JWT 进行了优化,考虑到后续多用户同时使用的情况,添加了 Druid 连接池以提升性能。
增强 JWT: 使用强加密算法优化 JWT,避免使用 HS256,改用 HS512,密钥长度至少达到 512-bit。
Druid 连接池配置: 在 application.yml 中增加 Druid 数据库连接池配置。
server:
port: 9000
servlet:
context-path: /hms
spring:
datasource:
# Druid 连接池配置
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://localhost:3306/hms_db?useSSL=false&serverTimezone=UTC&characterEncoding=utf8
username: null
password: null
driver-class-name: com.mysql.cj.jdbc.Driver
# Druid 基本配置
druid:
initial-size: 5
min-idle: 5
max-active: 20
# 配置获取连接等待超时的时间
max-wait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接
time-between-eviction-runs-millis: 60000
# 配置一个连接在池中最小生存的时间
min-evictable-idle-time-millis: 300000
# 验证连接有效性的查询语句
validation-query: SELECT 1
# 是否缓存 preparedStatement,也就是 PSCache
pool-prepared-statements: true
# 要启用 PSCache,必须配置大于 0,当大于 0 时,poolPreparedStatements 自动触发修改为 true
max-pool-prepared-statement-per-connection-size: 20
# 配置监控统计拦截的 filters
filters: stat,wall,slf4j
系统采用分层架构(Controller-Service-Repository)和 Maven 进行依赖管理。控制层负责处理 HTTP 请求和参数验证,业务层负责核心业务逻辑处理,数据层负责数据访问和持久化操作。
hms/
├── sql/
├── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── feisuanyz/
│ │ ├── common/
│ │ ├── config/
│ │ ├── controller/
│ │ ├── dto/
│ │ ├── entity/
│ │ ├── repository/
│ │ ├── service/
│ │ └── utils/
│ └── resources/
│ └── application.yml
└── pom.xml
# 用户认证
POST /api/auth/login # 用户登录
POST /api/auth/logout # 用户登出
POST /api/auth/refresh # 刷新 Token
# 用户管理
GET /api/users # 获取用户列表
POST /api/users # 创建用户
GET /api/users/{id} # 获取用户详情
PUT /api/users/{id} # 更新用户信息
DELETE /api/users/{id} # 删除用户
# 角色管理
GET /api/roles # 获取角色列表
POST /api/roles # 创建角色
PUT /api/roles/{id} # 更新角色
DELETE /api/roles/{id} # 删除角色
# 权限管理
GET /api/permissions # 获取权限列表
POST /api/roles/{roleId}/permissions # 分配权限
# 房间管理
GET /api/rooms # 获取房间列表
POST /api/rooms # 添加房间
GET /api/rooms/{id} # 获取房间详情
PUT /api/rooms/{id} # 更新房间信息
DELETE /api/rooms/{id} # 删除房间
# 房间状态
GET /api/rooms/available # 查询可用房间
PUT /api/rooms/{id}/status # 更新房间状态
# 预订管理
GET /api/bookings # 获取预订列表
POST /api/bookings # 创建预订
GET /api/bookings/{id} # 获取预订详情
PUT /api/bookings/{id} # 更新预订
DELETE /api/bookings/{id} # 取消预订
# 预订状态
PUT /api/bookings/{id}/confirm # 确认预订
PUT /api/bookings/{id}/cancel # 取消预订
# 入住管理
POST /api/checkins # 办理入住
GET /api/checkins # 获取入住记录
GET /api/checkins/{id} # 获取入住详情
PUT /api/checkins/{id}/checkout # 办理退房
# 账单管理
GET /api/bills # 获取账单列表
POST /api/bills # 创建账单
GET /api/bills/{id} # 获取账单详情
PUT /api/bills/{id}/pay # 支付账单
# 统计报表
GET /api/statistics/revenue # 收入统计
GET /api/statistics/occupancy # 入住率统计
GET /api/statistics/rooms # 房间统计
本方案展示了利用 AI 辅助工具快速构建企业级后端系统的完整流程。相比从零编写,该模式显著降低了版本兼容性与依赖配置的复杂度,缩短了开发周期。系统涵盖了从数据库设计、接口定义到安全优化的关键环节,提供了可直接运行的项目结构与 API 文档参考,适合用于毕业设计或中小型项目的快速落地。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online