Files
hzdyjs/docs/变更管理/学生信息宿舍字段显示问题分析.md
T
2025-07-16 18:11:31 +08:00

5.5 KiB
Raw Blame History

学生信息宿舍字段显示问题分析

问题描述

用户反馈:后台数据库里有宿舍楼和宿舍号相关信息,但是学生信息详情页没有展示。

问题分析

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_building varchar(100) - 宿舍楼
  • dormitory_room varchar(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映射:正确映射了两个字段
  • 数据库数据:两个字段都有数据

问题验证

数据写入验证

  1. ✅ 前端表单字段:dormitoryBuilding 和 dormitoryRoom 正确绑定
  2. ✅ 后端实体类:@TableField 注解正确映射到数据库字段
  3. ✅ 数据库表:字段存在且有数据

数据查询验证

  1. ✅ ResultMap映射:正确映射 dormitoryBuilding -> dormitory_building
  2. ✅ ResultMap映射:正确映射 dormitoryRoom -> dormitory_room
  3. ❌ selectVoPage查询:缺少 dormitory_room 字段
  4. ❌ 前端详情页面:字段名称错误 (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 字段,导致详情页面显示为空。

修复优先级:

  1. 🔴 高优先级:修复Mapper查询语句,添加 dormitory_room 字段
  2. 🟡 中优先级:修复前端详情页面字段名称不一致问题

修复完成后,宿舍楼和宿舍号信息将正常在详情页面显示。