5.5 KiB
学生信息宿舍字段显示问题分析
问题描述
用户反馈:后台数据库里有宿舍楼和宿舍号相关信息,但是学生信息详情页没有展示。
问题分析
1. 前端页面分析
详情页面字段绑定
文件:web/src/views/xg-xx/studentInfo/components/StudentDetailDialog.vue
<div class="info-item">
<label>宿舍楼:</label>
<span>{{ studentInfo.dormBuilding }}</span>
</div>
<div class="info-item">
<label>宿舍号:</label>
<span>{{ studentInfo.dormRoom }}</span>
</div>
编辑页面字段绑定
文件:web/src/views/xg-xx/studentInfo/components/StudentEditDialog.vue
<el-form-item label="宿舍楼" prop="dormitoryBuilding">
<el-input v-model="form.dormitoryBuilding" placeholder="请输入宿舍楼" />
</el-form-item>
<el-form-item label="宿舍号" prop="dormitoryRoom">
<el-input v-model="form.dormitoryRoom" placeholder="请输入宿舍号" />
</el-form-item>
发现问题1:前端字段名称不一致
- 详情页面使用:
dormBuilding和dormRoom - 编辑页面使用:
dormitoryBuilding和dormitoryRoom
2. 后端实体类分析
实体类字段定义
文件:backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgStudentInfo.java
/**
* 宿舍楼
*/
@TableField("dormitory_building")
private String dormitoryBuilding;
/**
* 宿舍号
*/
@TableField("dormitory_room")
private String dormitoryRoom;
VO类字段定义
文件:backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgStudentInfoVo.java
private String dormitoryBuilding;
private String dormitoryRoom;
3. 数据库字段分析
数据库表结构
表名:xg_student_info
字段:
dormitory_buildingvarchar(100) - 宿舍楼dormitory_roomvarchar(20) - 宿舍号
4. Mapper映射分析
ResultMap映射配置
文件:backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgStudentInfoMapper.xml
<resultMap type="org.dromara.xg.domain.vo.XgStudentInfoVo" id="XgStudentInfoResult">
<result property="dormitoryBuilding" column="dormitory_building"/>
<result property="dormitoryRoom" column="dormitory_room"/>
</resultMap>
selectVoPage查询语句
SELECT
id, student_no, name, gender, birth_date, phone, email,
id_card, nationality, political_status, major_name, class_name,
grade, college_name, dormitory_building, photo_path, guardian_name,
guardian_phone, guardian_relation, emergency_contact_name,
emergency_contact_phone, emergency_contact_relation,
enrollment_date, student_status, remark,
create_by, create_time, update_by, update_time,
deleted, tenant_id, counselor_id, class_teacher_id,
home_address, bank_card_no, bank_name, is_poor_student,
health_status, specialties, family_income,
social_activities, awards, violations,
info_status, data_source, last_batch_id, last_audit_time,
is_complete, completion_rate, ext_field1, ext_field2, ext_field3, ext_field4, ext_field5
FROM xg_student_info
发现问题2:查询字段缺失
- 查询语句中包含
dormitory_building - 但是缺少
dormitory_room字段
根本原因分析
问题1:前端字段名称不一致
- 详情页面:使用
dormBuilding和dormRoom - 编辑页面:使用
dormitoryBuilding和dormitoryRoom - 后端返回:
dormitoryBuilding和dormitoryRoom
问题2:Mapper查询字段缺失
- selectVoPage查询:只包含
dormitory_building,缺少dormitory_room - ResultMap映射:正确映射了两个字段
- 数据库数据:两个字段都有数据
问题验证
数据写入验证
- ✅ 前端表单字段:
dormitoryBuilding和dormitoryRoom正确绑定 - ✅ 后端实体类:
@TableField注解正确映射到数据库字段 - ✅ 数据库表:字段存在且有数据
数据查询验证
- ✅ ResultMap映射:正确映射
dormitoryBuilding->dormitory_building - ✅ ResultMap映射:正确映射
dormitoryRoom->dormitory_room - ❌ selectVoPage查询:缺少
dormitory_room字段 - ❌ 前端详情页面:字段名称错误 (
dormBuilding应为dormitoryBuilding)
解决方案
方案1:修复Mapper查询语句(核心问题)
在 XgStudentInfoMapper.xml 的 selectVoPage 查询中添加 dormitory_room 字段:
SELECT
id, student_no, name, gender, birth_date, phone, email,
id_card, nationality, political_status, major_name, class_name,
grade, college_name, dormitory_building, dormitory_room, photo_path, guardian_name,
-- 其他字段...
方案2:修复前端字段名称
在 StudentDetailDialog.vue 中修正字段名称:
<div class="info-item">
<label>宿舍楼:</label>
<span>{{ studentInfo.dormitoryBuilding }}</span>
</div>
<div class="info-item">
<label>宿舍号:</label>
<span>{{ studentInfo.dormitoryRoom }}</span>
</div>
结论
主要问题:XgStudentInfoMapper.xml 的 selectVoPage 查询语句中缺少 dormitory_room 字段。
次要问题:前端详情页面字段名称与后端不一致。
数据状态:数据实际上正确写入了数据库,只是查询时没有获取到 dormitory_room 字段,导致详情页面显示为空。
修复优先级:
- 🔴 高优先级:修复Mapper查询语句,添加
dormitory_room字段 - 🟡 中优先级:修复前端详情页面字段名称不一致问题
修复完成后,宿舍楼和宿舍号信息将正常在详情页面显示。