# 学生信息宿舍字段显示问题分析
## 问题描述
用户反馈:后台数据库里有宿舍楼和宿舍号相关信息,但是学生信息详情页没有展示。
## 问题分析
### 1. 前端页面分析
#### 详情页面字段绑定
文件:`web/src/views/xg-xx/studentInfo/components/StudentDetailDialog.vue`
```vue
{{ studentInfo.dormBuilding }}
{{ studentInfo.dormRoom }}
```
#### 编辑页面字段绑定
文件:`web/src/views/xg-xx/studentInfo/components/StudentEditDialog.vue`
```vue
```
**发现问题1:前端字段名称不一致**
- 详情页面使用:`dormBuilding` 和 `dormRoom`
- 编辑页面使用:`dormitoryBuilding` 和 `dormitoryRoom`
### 2. 后端实体类分析
#### 实体类字段定义
文件:`backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgStudentInfo.java`
```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`
```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`
```xml
```
#### selectVoPage查询语句
```sql
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` 字段:
```sql
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` 中修正字段名称:
```vue
{{ studentInfo.dormitoryBuilding }}
{{ studentInfo.dormitoryRoom }}
```
## 结论
**主要问题**:`XgStudentInfoMapper.xml` 的 `selectVoPage` 查询语句中缺少 `dormitory_room` 字段。
**次要问题**:前端详情页面字段名称与后端不一致。
**数据状态**:数据实际上正确写入了数据库,只是查询时没有获取到 `dormitory_room` 字段,导致详情页面显示为空。
**修复优先级**:
1. 🔴 **高优先级**:修复Mapper查询语句,添加 `dormitory_room` 字段
2. 🟡 **中优先级**:修复前端详情页面字段名称不一致问题
修复完成后,宿舍楼和宿舍号信息将正常在详情页面显示。