
做一套房屋租赁管理系统其实没有想象中那么复杂但也没想象中那么简单。老实说这套系统最吸引我的点是Info【可直接运行】这几个字全栈项目最怕的就是拿到源码跑不起来环境问题、依赖冲突、数据库版本不一致随便一个就能卡一整天。而SpringBoot后端加Vue前端加MySQL这套组合是目前国内中小型管理系统开发中最常见也最稳妥的技术栈,不管是拿来学习、二次开发还是直接在真实业务中部署使用都有很强的参考价值。这篇博文我会从需求拆解、前后端架构、数据库设计、启动部署到踩坑经验完整讲清楚这套系统是怎么运作的希望给正在做同类项目或者准备学习全栈开发的朋友一份能直接抄作业的参考资料。很多人一听到管理系统就觉得是CRUD堆功能但其实租赁管理这个场景有它非常独特的业务逻辑。房屋的状态流转、租客和合同的时间关联、租金账单的计算和逾期处理这些都不只是一个简单的增删改查。网上能找到的很多源码要么只做了个壳子要么业务逻辑和实际使用脱节真正能落到日常管理里的其实不多。1. 先拆解需求一套租赁管理系统到底要解决什么问题1.1 租赁业务的核心角色与流程做系统之前要先搞清楚谁在用。这套系统面向的角色其实很清晰主要就是管理员通常是小规模房产的运营方或二房东和租客。从管理员的视角看日常工作量集中在这么几块录入房源信息、处理租客入住和退租、跟进合同到期时间、按时收租金、记录报修和投诉。很多小规模管理者还在用Excel甚至纸质本子管理查一处信息要翻半天遇到合同到期忘记提醒租金漏收也是常有的事。从租客的视角看他们想知道的是我租的房什么情况、什么时候交租金、物业费怎么交、有问题怎么报修。如果能有一个界面让租客自己查看这些信息管理员的沟通成本会大幅下降。所以核心业务流程是这样闭合的房源登记入住签约抄表收租报修处理退租结算。每一步都依赖前一步产生的数据比如退租结算需要调取入住时的押金记录、历史账单明细、水电表读数如果这些数据散落在不同表格里对账就是一场灾难。这套系统的价值就是把整条链路的数字记录串起来。1.2 六大核心功能模块拆开来看这个系统主要包含六大模块每个模块解决一类明确的业务问题房源管理模块维护所有房屋的楼栋、门牌号、户型、面积、朝向、租金单价、当前状态。状态至少要区分已出租和待出租这样管理员能快速知道哪些房子还能租出去。有些项目还会加装修情况、家具配套等字段看具体场景需求。租客管理模块登记租客的基础信息姓名、联系方式、证件号、紧急联系人等并且要和合同、房源关联起来。一个租客可以租多套房一套房在不同时段也会有不同租客这里的历史记录一定要保留不能租客退租后把信息直接删掉。合同管理模块这是整条业务链的核心。租赁起止时间、租金金额、押金规则、缴费周期月付、季付、物业费承担方式、违约条款等。合同状态也要管理好生效中、即将到期、已到期、已终止。系统要能根据合同到期日自动生成提醒。收租与账单模块根据合同自动生成每期租金账单记录实收金额和收款时间支持部分缴费和逾期标记。每个房源一个账单列表每笔钱都能对上号年底做统计时不用再从微信聊天记录里翻转账凭证。报修与投诉模块租客提交报修单管理员接单处理完成后反馈结果。这个模块看似不起眼却是租客体验中感知最强的部分处理不及时很容易积累矛盾。统计与提醒模块营收总览、在租房源数、即将到期合同列表、逾期账单列表。管理系统的价值不只在于记录更在于通过提醒机制减少人工漏项。1.3 为什么技术栈选SpringBoot、Vue和MySQL先说后端。SpringBoot是目前Java后端开发事实上的主流框架用它做管理系统非常顺手。自动配置机制把大量基础工作做好了团队开发时接口层的开发效率很高加上Spring Security或者JWT做登录鉴权很成熟做一套带角色权限的管理后台选它没有毛病。前端用Vue则是看中它的组件化开发思路和相对平缓的学习曲线。Element UI或者Element Plus组件库提供了现成的表格、表单、弹窗、日期选择器管理系统的页面形态又高度统一无非是表单收集数据、表格展示数据、弹窗确认操作组件库能省下大量重写样式的时间。数据库用MySQL的理由更简单它足够稳定、生态成熟、部署方便绝大多数开发者本地都装了。从数据量来说一套租赁管理系统的数据规模连MySQL性能的皮毛都用不到选它是最稳妥的做法。也正因如此这套源码对运行环境的要求并不苛刻普通笔记本完全带得动。2. 系统架构与数据库设计顺便讲清楚表与表之间的关系2.1 整体分层架构整套系统按标准的前后端分离结构组织。后端起在8080端口前端通过代理转发请求避免开发环境下的跨域问题。后端内部采用经典三层架构控制层负责接收前端请求和参数校验不写业务逻辑服务层处理具体业务规则比如生成账单、校验合同重叠日期数据访问层用MyBatis Plus操作数据库简化单表CRUD的工作量。三层分开的好处是后期加功能时修改范围可控不会动一处牵全身。认证方面系统采用基于Token的登录机制。用户登录成功后后端返回Token前端拿到后存在本地之后每次请求在请求头里带上。拦截器会校验Token的合法性和有效期同时根据用户角色控制接口访问权限。管理端和租客端看到的菜单和操作按钮完全不一样这个逻辑在路由和按钮级权限两个层面处理。2.2 核心表结构设计逻辑数据库表不多核心的几张我大致说一下。用户表存管理员和租客账号字段包含用户名、加密后的密码、角色类型、昵称、手机号。这里的角色类型区分了管理端和租客端租客登录后会自动关联自己的租赁信息。房源表房屋编号、所在楼栋、户型、面积、朝向、租金单价、押金金额、当前状态0待租1在租2维修中、备注。其中当前状态字段看似简单但实际影响很多业务逻辑下架、新建合同时都要先检查房源状态。租客表姓名、性别、手机号、证件类型及号码、紧急联系人、备注。注意租客表和用户表是分开的用户表管登录租客表管信息两者通过外键关联好处是即使同一租客换了手机号注册新账号历史租赁记录依然能关联上。合同表合同编号、房源ID、租客ID、起租日期、结束日期、租金单价、计费周期、押金金额、合同状态、创建时间。合同表同时关联房源和租客是整套系统业务关系的枢纽。账单表账单编号、合同ID、费用类型租金/押金/水电、应收金额、实收金额、账单周期、缴费状态未缴/部分缴纳/已缴纳、缴费时间。生成账单的动作一般放在服务层创建一个新合同时按计费周期自动生成未来若干期的账单记录。抄表表房源ID、上次读数、本次读数、抄表日期、费用。抄表数据分析出用电量后带入租金系统计算费用这块做得精细一点能避免很多纠纷。维修记录表报修单号、房源ID、报修人、问题描述、处理状态、处理结果、创建时间、完成时间。整个库的设计核心是合同表这张关系枢纽房源和租客是多对多关系但通过合同表可以查清某个房源的历史租客也可以查清某位租客租过哪些房源对账和复盘都非常便利。2.3 几张关键表的关联关系速查主表关联表关联字段说明房源表合同表房源ID一个房源可有多份历史合同租客表合同表租客ID一个租客可租过多套房合同表账单表合同ID一份合同对应多期账单用户表租客表用户ID登录账号与租客资料对应3. 前端页面的设计思路管理后台与租客端分开做的原因3.1 页面整体结构与路由组织前端采用Vue Element UI构建按照角色维度拆成两套界面。管理后台的首页是数据概览用卡片展示在租房源数、待收租金、待处理报修、即将到期合同下面再放最近半年的营收趋势图。这些数据都有后端统计接口支撑查询时按月份聚合SQL写个GROUP BY就够。侧边栏菜单则按业务模块组织房源管理、租客管理、合同管理、账单管理、报修管理、数据统计。每一块进去都是标准的顶部操作区 中间表格区 右侧弹窗编辑布局。表格区支持分页和条件筛选方便管理员在海量数据中快速定位目标记录。租客端的页面则精简很多。登录后首页展示自己当前合同的基本信息包括房源位置、租金标准、租期起止我的账单列表里能看到每期应收应付报修页面提交一个表单填描述和上传图片即可。租客端做轻量目的就是让非技术人员也能零学习成本地上手。3.2 几个核心页面的交互细节房源管理页的表格列设计很讲究。除了基本的楼栋门牌、户型面积、租金单价外状态列一定要用Tag标签展示待租绿色、在租蓝色、维修中橙色扫一眼就能掌握全局。操作区的新建房源按钮和表格行的编辑/下架按钮要分开行内按钮强调易用性页面顶部按钮负责新增场景。合同管理页是我认为交互上最需要下功夫的一页。新建合同时房源下拉选择器要联动显示当前房屋的租金和状态选完房源后自动带出减少手工输入。日期范围选择器选择租期系统会在提交时校验和现有合同是否有时间重叠。合同列表里的状态列同样用彩色Tag提醒即将到期的合同额外用黄色高亮。账单管理页的核心是一键生成账单功能。管理员选择合同后系统自动计算当前周期应缴金额生成待缴账单。账单列表的筛选维度要足够丰富按房源、按租客、按状态、按周期。实收操作弹窗里可以修改实收金额、填写收款方式和收款时间做部分缴费时自动更新账单状态为部分缴纳。登录页的设计也要提一句页面同时支持管理员和租客两种角色入口登录后根据角色跳转到不同路由。这里有个容易踩的坑前端路由守卫要同时处理未登录和角色不匹配两种情况否则会出现已登录用户手动改URL访问对方页面却毫无拦截的问题。3.3 前后端联调的关键点联调阶段最常用到的是代理转发。Vue项目的开发服务器配置里加一个代理把前端的8080请求转发到后端的8080接口前端代码里统一封装axios实例baseURL指到/api即可这样上线后只需简单调整Nginx的反向代理配置就能无缝切换。接口响应格式建议全项目统一{ code: 200, message: 操作成功, data: {} }前端在axios响应拦截器里统一判断code值非200的情况弹错误提示。这样后端不管哪个接口出错前端处理逻辑都是同一套不用每个页面单独写错误处理。4. 从零启动完整的环境准备与运行步骤4.1 环境要求与版本选型我自己实际跑通这套源码用的环境大概是这样的组件版本要求说明JDK1.8及以上建议直接用8或11稳定Maven3.6以上用于后端依赖管理和打包Node.js14以上运行前端开发服务器MySQL5.7或8.0注意8.0的认证插件配置IDE任选后端推荐IDEA前端用VS Code也行这套组合几乎没有任何特殊环境要求全部是主流版本。唯一要注意的坑是Node版本过高时某些低版本的依赖包可能安装失败此时建议把Node降级到16版本再用。4.2 数据库初始化步骤拿到源码后先打开数据库文件夹找到SQL初始化脚本。使用命令行或者数据库可视化工具执行顺序不能乱先创建数据库再执行脚本。CREATE DATABASE IF NOT EXISTS house_rental DEFAULT CHARACTER SET utf8mb4;执行完脚本之后确认一下表是否全部生成正常会看到用户表、房源表、租客表、合同表、账单表这样一套核心表。然后检查数据是否写入成功特别是用户表里通常应该预置了一条管理员账号记录登录时要用。4.3 后端启动配置用IDEA打开后端项目后先等Maven把依赖拉完。这个阶段最容易出问题的是网络原因导致依赖下载失败解决方案就是配置国内镜像源。在Developer工具里设置阿里云镜像仓库重新刷新就能解决。接下来修改数据库连接配置spring: datasource: url: jdbc:mysql://localhost:3306/house_rental?useUnicodetruecharacterEncodingutf-8useSSLfalseserverTimezoneAsia/Shanghai username: root password: 你的数据库密码启动后端前确认三件事MySQL服务是否开启、数据库账号密码是否和配置一致、端口8080是否被占用。都没问题的话启动入口类看到Spring Boot的启动日志中有Started字样和Tomcat端口号后端就起来了。4.4 前端启动与本地联调开第二个终端窗口进入前端项目目录先装依赖npm install如果安装过程报错或者特别慢一样先把npm镜像切换成国内源。npm config set registry https://registry.npmmirror.com安装完成之后启动开发服务器npm run dev看到Compiled successfully之后浏览器打开对应端口通常就是8081这样的端口。这时如果前端能出现登录页面说明前后端通信链路通畅用预置管理员账号登录就能进入管理后台。4.5 一个特殊提醒登录后页面白屏如何排查这种情况多半是前端路由没有正确匹配。先看浏览器控制台有没有报错再确认登录成功后是否存了Token以及跳转的路径是否存在于路由表里。管理后台和租客端的路由是两套管理员账号如果被前端路由守卫判定为无权限访问租客端就会一直白屏。排查思路是从网络请求开始看登录接口通不通、用户信息接口通不通、再到路由和权限判断一层层缩小范围。5. 源码落地过程中的经验之谈与优化方向5.1 最容易踩的五个坑第一数据库连接失败。这个坑出现频率最高多半不是SQL脚本的问题而是密码不一致或者MySQL服务没启动。Windows下记得先确认服务列表里MySQL服务状态为正在运行。第二后端启动后接口404。原因通常有两个一是启动类没放在正确包路径下导致Spring无法扫描到Controller二是接口地址写错前端调用的路径和后端声明的路径不一致。第三Vue项目npm install卡住不动。解决方法是切换镜像源后删除node_modules和package-lock.json重新安装。第四跨域请求被拦截。开发环境下通过Vue的代理转发解决生产环境需要在Nginx里配置反向代理。第五日期格式显示成时间戳。在SpringBoot的配置里统一处理一下返回给前端时会自动格式化成指定字符串格式。前端请求本地代理配置示例// vite.config.js 或 vue.config.js module.exports { devServer: { proxy: { /api: { target: http://localhost:8080, changeOrigin: true } } } }5.2 系统上线前建议做的改进这套源码直接运行当然没问题但真要部署到真实生产环境有几件事我强烈建议先做。第一把默认的管理员密码改掉密码存储用的加密算法确认一下强度是否够。第二数据库账号不要用root连应用建议创建独立的数据库账号只授予这个库的增删改查权限。第三给MySQL做定时备份租赁系统的核心资产就是那些合同和账单数据丢哪一行都麻烦。接口层面的改进空间也很大。目前如果并发量不大单机部署就够。如果未来房源数量上千、租客数量达到几千建议把统计类接口的SQL加上索引优化特别是按合同状态、房源ID、账单状态这几个高频查询条件建联合索引。数据量再大的话可以引入Redis做热门数据的缓存不过以租赁系统的业务规模来说这一步目前看不必要。5.3 可以继续扩展的方向这套系统的架构留了很好的扩展空间。业务层面可以加看房预约功能、电子合同签署、租金逾期自动计算滞纳金体验层面可以接入微信公众号消息提醒租客绑定账号后实时接收缴费和到期通知管理层面可以加操作日志记录整个系统做了哪些修改一清二楚。从技术角度如果想进一步提升可以把登录对接统一认证服务、引入Redis管理Token会话、前端换TypeScript重写、后端拆分成微服务但这些都属于超出可直接运行范围的需求。就这套系统本身而言目前的架构已经足够清楚很适合作为学习SpringBoot和Vue全栈开发的练手项目也能直接支撑小规模的真实业务。5.4 个人的实际体会我把这套源码完整跑通过之后最大的感受是管理系统的难点其实不在技术而在对业务的理解。一个合同状态字段的设计、一个账单生成时机的选择都会直接影响使用体验。这套项目中合同和账单之间的联动做得比较合理这恰恰是很多同类源码最薄弱的地方。如果你打算在此基础上做二次开发建议先按自己的管理流程把核心字段画一张草图再对照源码里的表结构做取舍。别人的表设计和你的实际业务有出入是很正常的改表字段可比改业务逻辑容易得多。跑通只是第一步跑出自己的业务逻辑才是这套源码真正给你的东西。最后提醒一句改动前记得先备份原库我就因为调试时误改了一条账单数据对账时多花了半小时。