数据库实践2022独立开发者

小区物业管理系统

从业务角色和物业实体出发,完成关系数据库设计、权限划分与 Java Web 数据管理功能,把数据库模型连接到可运行的应用界面。

Java EEMySQLJDBCJava ReflectionEclipseNavicat
ARCHIVE / 2022关系数据库应用

从业务对象到可操作的数据库界面。

楼宇buildNum
房屋buildNum + roomNum
业主id
管理员jobId
物业费buildNum + roomNum
维修记录buildNum + roomNum
1 : NN : 1N : N1 : N1 : N
根据 2022 年原始数据库设计重绘,呈现楼宇、房屋、业主、管理员、物业费与维修记录之间的核心关系。

01 / 项目快照

年份

2022

角色

独立开发者

技术栈

Java EE · MySQL · JDBC · Eclipse · Navicat

核心范围

数据库设计 · 角色权限 · Web 数据管理

02 / 项目背景

把物业公司的日常信息管理转化为系统模型。

这是一个用于模拟小区物业公司的日常信息管理的系统。报告中的系统对象包括楼宇、房屋、业主、管理员、物业费和物业维修,并要求支持信息登记、调整、查询与统计,以及基于不同用户角色的权限。

03 / 角色与权限

同一套数据,不同的操作边界。

01

经理

全局运营管理

管理楼宇、楼宇管理员、房屋、管理员与业主信息;查询、录入、更新与统计物业费,并管理维修记录。

02

管理员

负责所管楼宇的日常操作

可修改个人资料、查询自己管理楼宇中的业主信息,并处理维修需求与评价;较高权限的管理员可处理物业费信息。

03

业主

个人信息与缴费可见性

可查看和修改个人信息,并查询自己的物业费缴纳记录与缴纳期限。

04 / 数据模型

八个关系模式,承接业务对象与关系。

原报告定义了楼宇信息、楼宇管理信息、房屋信息、业主信息、管理员信息、经理信息、物业维修情况和物业费信息八个核心关系模式。

01 楼宇信息02 楼宇管理信息03 房屋信息04 业主信息05 管理员信息06 经理信息07 物业维修情况08 物业费信息
楼宇buildNum
房屋buildNum + roomNum
业主id
管理员jobId
物业费buildNum + roomNum
维修记录buildNum + roomNum
1 : NN : 1N : N1 : N1 : N
根据 2022 年原始数据库设计重绘。

05 / 设计决策

01

组合标识

报告明确说明:单独的楼号无法唯一标识一套房屋;业主身份证号也不适合作为房屋主键,因为一位业主可以拥有多套房屋。因此房屋信息以楼号与房号共同标识。

02

引用完整性

物业费信息和维修记录通过楼号、房号关联到既有房屋记录,避免尚未对应房屋的物业费或维修记录出现。

06 / 应用与数据库连接

用 JDBC 把关系模型连接到 Web 界面。

Java EE↓JDBC Driver↓PreparedStatement↓MySQL↓ResultSet↓Java Entity↓Web Interface

报告中的 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 / 核心模块

01

楼宇管理:基本信息与楼宇管理员配置。

02

房屋管理:房屋查询、录入与删除。

03

业主与管理员管理:根据角色处理信息查询、录入、更新或删除。

04

物业费管理:缴纳信息查询、录入、更新与楼宇统计。

05

维修管理:记录报修需求、处理结果与评价。

09 / 运行证据

保留数据库结果真正进入界面的证据。

以下为 2022 年原始课程报告中提取的运行结果。管理员界面中的身份证号和电话号码已在公开版本中脱敏;点击图片可放大查看。

10 / 现在回看

这个项目最重要的价值,不在页面本身,而在于我第一次把业务对象系统地转化成实体、关系、主键、外键和权限规则,再通过 JDBC 把数据库设计连接到一个实际可操作的 Web 应用。

报告也清楚暴露了当时的局限:主键与外键冲突处理不完整,局部刷新没有真正使用 AJAX,而是以浮动框作为折中方案;部分 SQL 字符串在前端 JavaScript 中形成。若今天重做,我会把数据访问集中在服务端,使用参数化查询,增强输入验证与异常处理,并更清晰地分离 UI、业务逻辑和数据访问层;不会在客户端构造可执行 SQL。

下一个案例

个人通讯录管理系统

↗