小区物业管理系统
从业务角色和物业实体出发,完成关系数据库设计、权限划分与 Java Web 数据管理功能,把数据库模型连接到可运行的应用界面。
从业务对象到可操作的数据库界面。
01 / 项目快照
2022
独立开发者
Java EE · MySQL · JDBC · Eclipse · Navicat
数据库设计 · 角色权限 · Web 数据管理
02 / 项目背景
把物业公司的日常信息管理转化为系统模型。
这是一个用于模拟小区物业公司的日常信息管理的系统。报告中的系统对象包括楼宇、房屋、业主、管理员、物业费和物业维修,并要求支持信息登记、调整、查询与统计,以及基于不同用户角色的权限。
03 / 角色与权限
同一套数据,不同的操作边界。
经理
全局运营管理管理楼宇、楼宇管理员、房屋、管理员与业主信息;查询、录入、更新与统计物业费,并管理维修记录。
管理员
负责所管楼宇的日常操作可修改个人资料、查询自己管理楼宇中的业主信息,并处理维修需求与评价;较高权限的管理员可处理物业费信息。
业主
个人信息与缴费可见性可查看和修改个人信息,并查询自己的物业费缴纳记录与缴纳期限。
04 / 数据模型
八个关系模式,承接业务对象与关系。
原报告定义了楼宇信息、楼宇管理信息、房屋信息、业主信息、管理员信息、经理信息、物业维修情况和物业费信息八个核心关系模式。
05 / 设计决策
组合标识
报告明确说明:单独的楼号无法唯一标识一套房屋;业主身份证号也不适合作为房屋主键,因为一位业主可以拥有多套房屋。因此房屋信息以楼号与房号共同标识。
引用完整性
物业费信息和维修记录通过楼号、房号关联到既有房屋记录,避免尚未对应房屋的物业费或维修记录出现。
06 / 应用与数据库连接
用 JDBC 把关系模型连接到 Web 界面。
报告中的 JdbcUtils 负责加载驱动、获取数据库连接并创建 PreparedStatement;查询通过 executeQuery() 返回 ResultSet,插入、更新和删除通过 executeUpdate() 的受影响行数判断是否成功。
07 / 技术亮点
用反射减少多表实体映射的重复。
报告针对多张表返回不同实体对象的问题,使用 Java Reflection、PropertyDescriptor、ResultSetMetaData 和字段类型动态获取 setter,并把 ResultSet 中的 VARCHAR、INT、FLOAT 值映射到对应 Java Entity。
Class<?> c = object.getClass();
Field[] fields = c.getDeclaredFields();
PropertyDescriptor pd =
new PropertyDescriptor(fields[i].getName(), c);
methods[i] = pd.getWriteMethod();
method.invoke(obj, rs.getString(i));这是一种为减少实体映射重复代码而做的实现,而非现代 ORM 框架。
08 / 核心模块
楼宇管理:基本信息与楼宇管理员配置。
房屋管理:房屋查询、录入与删除。
业主与管理员管理:根据角色处理信息查询、录入、更新或删除。
物业费管理:缴纳信息查询、录入、更新与楼宇统计。
维修管理:记录报修需求、处理结果与评价。
09 / 运行证据
保留数据库结果真正进入界面的证据。
以下为 2022 年原始课程报告中提取的运行结果。管理员界面中的身份证号和电话号码已在公开版本中脱敏;点击图片可放大查看。
10 / 现在回看
这个项目最重要的价值,不在页面本身,而在于我第一次把业务对象系统地转化成实体、关系、主键、外键和权限规则,再通过 JDBC 把数据库设计连接到一个实际可操作的 Web 应用。
报告也清楚暴露了当时的局限:主键与外键冲突处理不完整,局部刷新没有真正使用 AJAX,而是以浮动框作为折中方案;部分 SQL 字符串在前端 JavaScript 中形成。若今天重做,我会把数据访问集中在服务端,使用参数化查询,增强输入验证与异常处理,并更清晰地分离 UI、业务逻辑和数据访问层;不会在客户端构造可执行 SQL。