
简介基于 IDEA 开发的酒店管理系统完整源码工程采用 Maven 拆分聚合结构后台整合 JSP、MyBatis Plus、Spring、Spring MVC、Shiro 权限框架与短信验证接口前台使用 LayUI 和 EasyUI数据库为 MySQL。系统经严格测试、功能完整适合毕业设计、课程设计、期末大作业或工程实训参考也可学习 SSM 整合与后台管理开发。资源包共 2000 个文件压缩后约 111.36MB含 718 个 CSS、613 个 HTML、439 个 JS、96 个 JSP 及 Java 源码、JSON/XML 配置与说明文档前端样式、页面、交互脚本与后台逻辑分层清晰便于定位和二次开发。已有 37 人浏览学习资料包含源码、工程文件和说明文档可复现项目效果如需扩展房型、预约或权限功能可在现有代码上继续修改。使用中遇到问题可联系作者获得解答适合需要快速搭建酒店管理类项目的同学参考使用。 酒店管理系统大概是国内计算机专业里出现频率最高的几个练手项目之一。不管是课程设计、毕业设计还是刚进开发岗时的内部实训项目几乎每个写 Java 的人都碰过它。我前段时间也基于 IDEA 重新梳理了一个简化版的酒店管理系统从环境配置、数据库设计到功能编码完整走了一遍。这篇博文就是把这次的实际操作和经验整理出来重点聊聊“基于 IDEA 开发”这句话背后真正绕不开的工程问题给正在做类似项目的朋友做个参考。如果你是第一次用 IDEA 做完整项目或者已经动手但卡在了环境、依赖、接口调试这些环节这篇文章应该能帮你省不少时间。我默认你有一点 Java 和 SQL 基础但不会假设你熟门熟路很多细节我会直接说结论和踩坑点。1. 先想清楚再动手酒店管理系统的核心功能与技术选型1.1 酒店管理系统到底要管什么很多同学拿到题目第一反应是“写几个 CRUD 接口配个登录页面”结果做着做着就发现房间状态对不上、订单重叠、退房金额算错。原因很简单酒店管理系统的核心不是增删改查而是状态流转。客人从进店到离店完整流程就是一条线查询房间、预订、入住、消费、退房、结账。这条线上每一步都会改变房间和订单的状态。房间有“空闲、已预订、已入住、打扫中”几种状态订单有“预订、入住、退房、取消”几种状态。系统设计的关键是把这些状态变化和数据关系理顺再考虑页面和接口怎么展示。所以我建议画一张简单的状态图把每个操作会触发的状态变化标出来。比如“入住”这个动作会把房间从“已预订”改为“已入住”同时把订单状态从“已预订”改为“已入住”。这些关系理清楚了后面写代码就不会来回返工。1.2 技术选型与 IDEA 的角色技术栈我推荐一套比较稳妥的组合适合大多数课程设计和实际项目脚手架层次推荐方案说明后端框架Spring Boot 2.7.x内置 Tomcat省去手动配置服务器的繁琐步骤ORM 框架MyBatis适合手写动态 SQL房间和订单查询需要灵活条件数据库MySQL 8.0免费、资料多、网上踩坑记录也全前端Thymeleaf 或 Vue单体项目用 Thymeleaf 简单前后端分离用 Vue开发工具IntelliJ IDEA覆盖从创建工程到调试、Git、数据库、打包的全过程选这套方案的原因很现实Spring Boot 2.7 兼容 JDK 8 和 JDK 11网上教程最多MyBatis 能把复杂的查询条件写在 XML 里比 JPA 更容易控制IDEA 则是把这些环节串起来的核心工具。所谓“基于 IDEA 开发”重点不是 IDEA 本身有多炫而是 Maven 管理、代码跳转、断点调试、Git 操作、数据库面板这些能力在 IDEA 里是集成在一起的不用频繁切窗口开发效率差别很大。2. IDEA 环境与工程搭建给项目打好地基2.1 版本选择与环境配置IDEA 分社区版和旗舰版。社区版免费功能上对 Java、Spring Boot、MyBatis 这类开发基本没有短板真正缺的主要是部分前端框架和企业级工具支持对酒店管理系统这种业务系统影响不大。所以个人学习和练手社区版完全够用不需要一开始就折腾旗舰版。安装完 IDEA 后第一件事是检查 JDK 和 Maven。JDK 建议按项目实际情况选如果是新项目JDK 8 或 JDK 17 都行但要注意 Spring Boot 版本Spring Boot 2.7 用 JDK 8 最稳Spring Boot 3.x 必须配 JDK 17 以上。Maven 的配置位置在Settings - Build, Execution, Deployment - Build Tools - Maven这里要把Maven home path指向你本机安装的 Maven 目录。还有一个细节是 IDEA 默认会用内置的 Maven如果你之前没单独装过 Maven直接用内置的也可以但建议把User settings file指向一个自定义的settings.xml因为后面要配国内镜像。另外很多人问要不要汉化我的建议是不要。查报错、看日志的时候英文信息往往更准确插件名和配置项也是英文的刚上手可能慢一点但长远看省事。2.2 Maven 依赖引入与镜像配置国内网络环境下Maven 默认从中央仓库拉依赖会时不时抽风慢还是小事有时候直接下载失败。解决办法是给settings.xml配置阿里云镜像。mirrors mirror idaliyunmaven/id mirrorOfcentral/mirrorOf urlhttps://maven.aliyun.com/repository/public/url /mirror /mirrors配好镜像后再创建 Spring Boot 项目的pom.xml。我这次用的是 Spring Boot 2.7.18因为这个版本是 2.x 系列里比较成熟稳定的MyBatis 的 starter 用 2.3.2。parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version2.7.18/version /parent dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency dependency groupIdorg.mybatis.spring.boot/groupId artifactIdmybatis-spring-boot-starter/artifactId version2.3.2/version /dependency dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId scoperuntime/scope /dependency dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId optionaltrue/optional /dependency /dependencies如果你用的是 JDK 17 加 Spring Boot 3.x依赖坐标会有变化但思路是一样的。引入依赖后IDEA 右下角会提示 Maven 项目需要刷新点一下让它重新加载即可。2.3 新建项目还是导入老项目“基于 IDEA 开发”分两种情况。一种是完全新建在 IDEA 里File - New - Project选择 Spring Initializr然后填 Group、Artifact依赖在界面上直接勾选 Web、MyBatis、MySQL Driver、Lombok 就行。这个流程很简单IDEA 会帮你把初始工程结构和配置都生成好。另一种是拿到一个别人写好的项目比如学长给的 SSM 项目或老师发的课程设计源码。这种项目导入后最关键的一步是配置 Tomcat。很多人打开项目后直接点运行结果报错说没有配置服务器就开始怀疑项目有问题。实际上操作路径是Run - Edit Configurations - 左上角 - Tomcat Server - Local然后在Application server里选本机 Tomcat 目录Deployment选项卡中添加项目的exploded包最后设置Application context为项目访问路径。如果是 Spring Boot 项目就不需要单独配 Tomcat 了直接运行主类里的main方法就能启动因为内置了 Tomcat。这两种方式的区别要搞清楚很多报错都是从这里来的。3. 核心功能落地客房预订与状态流转3.1 数据库表设计的关键字段酒店管理系统的表不用设计得太复杂核心是房间表和订单表再配一个客户信息表就够了。重点在字段设计上尤其是状态字段。房间表room的关键字段id主键room_no房号room_type_id房间类型status房间状态用tinyint存数字price价格用decimal(10,2)订单表booking的关键字段id主键room_id关联房间表customer_name、customer_phone客户信息start_date、end_date入住时间和离店时间status订单状态total_amount总金额create_time下单时间状态字段我强烈建议用数字枚举而不是直接存“空闲”“已入住”这种中文字符串。原因有两个第一字符串占空间大且容易写错第二Java 枚举可以精确翻译数字的含义代码里不会满屏魔法数字。public enum RoomStatus { FREE(0, 空闲), BOOKED(1, 已预订), CHECKED_IN(2, 已入住), CLEANING(3, 打扫中); private final int code; private final String desc; RoomStatus(int code, String desc) { this.code code; this.desc desc; } public int getCode() { return code; } public String getDesc() { return desc; } }状态机要防止跳变。比如一个“已入住”的房间不能直接改成“空闲”必须先“退房”、再“打扫”、然后才能变为“空闲”。这些规则最好在 Service 层做校验别依赖前端页面控制。3.2 编码顺序与可用房间查询我的习惯是自底向上写先建表再写实体类然后是 Mapper 接口和 XML再是 Service最后 Controller。这个顺序的好处是底层明确了上层逻辑不会空中楼阁。酒店管理系统里最有代表性的功能是“查询某段时间内可用的房间”。这个需求的难点不是 CRUD而是判断时间重叠。过去很多人写between查询结果入住日和离店日的边界总是差一天。正确的判断条件是新订单的开始日期 已有订单的结束日期并且新订单的结束日期 已有订单的开始日期。这个条件成立说明时间区间有交集房间不可用。MyBatis 动态 SQL 可以这样写select idfindAvailableRooms resultTypecom.example.hotel.entity.Room SELECT * FROM room WHERE id NOT IN ( SELECT room_id FROM booking WHERE status IN (1, 2) AND #{startDate} end_date AND #{endDate} start_date ) /select这里status IN (1, 2)的意思是“已预订”和“已入住”的订单都要排除因为它们都占用了房间时间。写动态 SQL 时注意end_date这种字段是数据库中已有的列名#{startDate}和#{endDate}是传入参数两边别写反了。3.3 事务与防重复预订并发问题在酒店管理系统里很典型。两个客人同时看到同一间房同时下单如果不加控制可能两单都成功房间只给一个人。解决办法是两层防护。第一层是逻辑判断订单创建前先查一下时间段内有没有冲突订单就是 3.2 里那个动态 SQL。第二层是数据库层面的状态校验。在生成订单并修改房间状态时用乐观锁的思路UPDATE room SET status 1 WHERE id #{roomId} AND status 0这条 SQL 的巧妙之处在于AND status 0这个条件。如果返回的影响行数是 0说明房间已经被别人预订了直接提示“房间已被占用”。然后把订单创建、房间状态修改、金额计算放在同一个事务里任何一步失败都回滚。Service 方法上加一个注解就能解决Transactional(rollbackFor Exception.class) public boolean createBooking(CreateBookingRequest request) { // 1. 检查时间冲突 // 2. 乐观更新房间状态 // 3. 插入订单记录 }rollbackFor Exception.class的意思是遇到任何异常都回滚不加这个参数的话默认只在遇到 RuntimeException 时才回滚容易出隐蔽问题。4. 开发过程中的 IDEA 实用技巧4.1 Git 集成提交报错与回退 merge这个项目我全程用 IDEA 的 Git 集成遇到过两个高频问题同时也是热搜里经常出现的。第一个是提交时报类似Commit author is not xxx的错误。原因就是 Git 的user.name和user.email没有配置。解决很简单在 IDEA 的 Terminal 里执行git config --global user.name yourname git config --global user.email youexample.com配置完成后重新提交就不会报错了。这类问题在第一次用 IDEA 提交项目时特别常见因为很多人装完 Git 后直接打开项目根本没初始化身份信息。第二个是 merge 之后发现合错了分支想回退。IDEA 里的操作路径是打开左下角Version Control - Log找到那一次的 merge 提交记录右键选择Reset Current Branch to Here然后在弹窗里选Mixed模式。这个操作会把当前分支指针拉回到 merge 之前工作区改动保留相当于撤销这次合并。注意这个操作只适合本地分支。如果 merge 已经 push 到远程而且是多人协作的分支应该用Revert Commit生成一个反向提交千万别直接 reset否则会把别人提交也搞乱。我见过好几次因为 reset 远程分支导致队友代码丢失的情况处理起来非常痛苦。4.2 调试与日志从断点到 MyBatis 日志IDEA 的断点调试比System.out.println高效太多了。右键断点可以设置条件比如只希望某个循环执行到特定次数时停下来直接在断点条件里写index 5就行。还可以在断点上右键选择Evaluate expression在不修改代码的情况下计算任意表达式的值排查数据非常方便。调试 SQL 也有一个神器插件叫MyBatis Log Free。安装后控制台里会多一个 MyBatis Log 窗口它会自动把 MyBatis 输出的Preparing和Parameters两行日志拼接成一条完整的 SQL参数直接带进去复制出来就能在数据库工具里执行。没有这个插件的话你要自己手动把?替换成参数值时间长了非常崩溃。IDEA 还有一个容易被忽略的功能是生成类图。选中一个包或接口右键Diagrams - Show Diagram就能看到当前选区的类和接口之间的关系图。对于梳理酒店管理系统这种多模块项目类的依赖关系一目了然。如果发现图上有些类完全没有依赖关系大概率是设计有问题该拆拆该合合。4.3 数据库面板与接口自测IDEA 内置的 Database 工具对做这种管理系统太实用了。在右侧打开 Database 面板点加号选择 MySQL填好连接地址、用户名、密码后测试连接以后就能直接在 IDEA 里查看表结构、执行 SQL、甚至生成 CRUD 的 SQL 脚本。项目开发过程中改表字段不用来回切数据库客户端省不少事。导出数据库脚本也是高频需求。右键数据库或具体的表选择SQL Scripts - Dump或者直接用终端执行mysqldump。如果只是临时备份某几张表用 IDEA 的 Dump 功能更快导出的 SQL 文件直接能给别人跑。接口自测方面我推荐用 IDEA 自带 HTTP Client不需要额外装 Postman。在项目根目录新建一个.http文件写入类似下面的内容### 查询可用房间 GET http://localhost:8080/room/available?startDate2025-06-01endDate2025-06-03 Accept: application/json点行首的绿色箭头就能发送请求响应会显示在侧边栏。这个文件还可以提交到 Git新同事拿到项目后照着文件就能把接口全部测一遍比口头交流高效得多。快捷键方面挑几个最提升效率的CtrlShiftF全项目搜索AltInsert生成代码构造器、getter/setterCtrlAltL格式化代码。这三个知道之后写酒店管理系统这种几百行的类会顺手很多。4.4 基于现有项目创建新模块如果项目做大了想分成hotel-common、hotel-admin、hotel-api这种多模块结构可以在 IDEA 里右键项目名选择New - Module在弹出的窗口里选择 Maven然后填模块名。创建完需要在父工程的pom.xml的modules标签里把新模块加进去同时子模块的pom.xml里要声明父工程。多模块的好处是强制分层比如公共工具类放到hotel-common业务逻辑放hotel-admin接口定义放hotel-api互相依赖关系清晰编译时 IDEA 也帮我们处理模块间的依赖。不过对课程设计和中小型项目来说单模块已经足够没必要为了“架构感”强行拆模块。我见过很多同学拆了模块之后依赖关系一团乱启动都成问题。打包方面最常用的是 Maven 右侧面板双击package或者直接执行mvn clean package -DskipTests。-DskipTests能跳过测试代码编译和运行能省很多时间。如果项目配了 Docker也可以用 IDEA 的 Services 窗口连接本机 Docker右键Dockerfile直接构建镜像。但这一步对本地环境要求较高新手阶段先保证能打出 jar 包就行。5. 项目常见报错与排查记录做这个项目的过程中我记录了一些高频报错整理成速查表遇到问题可以直接对着找。现象常见原因处理建议Maven 依赖下载慢或失败访问中央仓库网络不稳定配置阿里云镜像见 2.2 节启动时报数据库连接失败MySQL 未启动、密码错误、连接串缺时区参数检查连接串是否包含serverTimezoneAsia/ShanghaiMyBatis XML 文件不生效application.yml没配置 mapper 路径增加mybatis.mapper-locations: classpath*:mapper/*.xml接口返回中文乱码连接串编码问题或响应头缺编码连接串加useUnicodetruecharacterEncodingutf8Lombok 的Data不生效IDEA 未启用注解处理器或插件缺失安装 Lombok 插件开启Enable annotation processingIDEA 频繁卡顿或自动关闭内存配置不足Help - Change Memory Settings调大内存至少 2048M克隆下来的项目无法识别为 Maven 工程缺少.idea目录或 Maven 模型未导入右键项目根目录Add as Maven Project排查问题的顺序我一般遵循“先配置、再依赖、最后代码”。数据库连接报错先看 MySQL 服务有没有启动端口是不是 3306账号密码对不对再看连接串里的参数。MyBatis 报错先确认 XML 的 namespace 和 Mapper 接口路径是否一致这是最容易犯的错。IDEA 自身的问题基本集中在内存和缓存启动不了的话除了调内存还可以File - Invalidate Caches / Restart清一次缓存。这个项目做完后最大的体会是工具链熟悉度对开发体验的影响被低估了。IDEA 用顺手了创建工程、查依赖、改表结构、调接口、提交代码全在同一个界面里完成思路不容易断。但工具终究是为业务服务的酒店管理系统真正难的地方还是状态设计和并发控制。先把业务逻辑想清楚再让 IDEA 帮你把代码写得顺畅这个顺序一定不要反。最后再分享一个小经验开发过程中遇到奇怪的问题先去看 IDEA 底部控制台完整报错不要只看弹窗里那一行提示很多问题就是靠报错堆栈里的哪一行 SQL 或哪一行代码才定位出来的。本文还有配套的精品资源点击获取