3.3 KiB
3.3 KiB
xq_client_log表字段映射修复报告
问题描述
在测试智能项圈日志功能时,遇到了以下错误:
SQLSyntaxErrorException: Unknown column 'device_voltage' in 'field list'
问题原因
xq_client_log 表的实际结构与我们的实体类 XqClientLog 不匹配:
实际表结构(从图片中观察到的字段):
id- 主键device_id- 设备IDdeviceld- 设备长IDlongitude- 经度latitude- 纬度altitude- 海拔nsat- 卫星数量rsrp- 信号强度battery- 电池电量temperature- 温度steps- 步数acc_x,acc_y,acc_z- 加速度计数据bandge_status- 绑带状态ver- 版本time- 时间
实体类期望的字段:
device_voltage- 设备电压device_temp- 设备温度server_device_id- 主机设备IDwalk_steps- 步数y_walk_steps- 昨日步数create_time,update_time- 时间字段
解决方案
修改了 XqClientLogMapper.xml 文件,建立字段映射关系:
字段映射关系
| 实际表字段 | 实体类属性 | 说明 |
|---|---|---|
device_id |
deviceId |
设备ID |
battery |
deviceVoltage |
电池电量映射到设备电压 |
temperature |
deviceTemp |
温度 |
deviceld |
serverDeviceId |
设备长ID映射到主机设备ID |
latitude |
latitude |
纬度 |
longitude |
longitude |
经度 |
steps |
walkSteps |
步数 |
steps |
yWalkSteps |
步数映射到昨日步数(相同值) |
time |
createTime |
时间字段映射到创建时间 |
time |
updateTime |
时间字段映射到更新时间 |
修改的文件
文件: tradeCattle/aiotagro-cattle-trade/src/main/resources/mapper/XqClientLogMapper.xml
主要修改:
- ResultMap映射: 更新字段映射关系
- Base_Column_List: 更新查询字段列表
- xqLogList查询: 使用
time字段替代update_time - batchInsert: 适配实际表结构进行插入
测试验证
1. 编译成功
- 项目编译无错误
- MyBatis映射文件语法正确
2. 应用启动
- Spring Boot应用正常启动
- 数据库连接正常
3. 功能测试
等待应用完全启动后,可以测试:
- 智能项圈日志查询
- 智能项圈运动轨迹
- 设备日志同步功能
数据示例
根据图片中的数据,xq_client_log 表包含35条记录,设备ID为 24075000139,包含:
- 电量: 98%
- 温度: 27.7°C 到 25.3°C
- 步数: 21步
- 位置: 纬度30.481417,经度114.401791
- 信号强度: -69到-73
注意事项
- 字段映射: 某些字段进行了语义映射(如battery→deviceVoltage)
- 时间字段: 使用
time字段同时映射到创建和更新时间 - 步数字段:
steps字段同时映射到总步数和昨日步数 - 数据完整性: 确保查询时字段存在且数据类型匹配
后续优化建议
- 数据库标准化: 考虑统一表结构,使用标准的字段名
- 字段重命名: 将实际表字段重命名为更标准的名称
- 数据类型优化: 确保字段数据类型与业务需求匹配
- 索引优化: 为常用查询字段添加适当的索引
成功指标
- ✅ 编译成功
- ✅ 应用启动正常
- ✅ SQL查询不再报错
- ✅ 字段映射正确
- 🔄 等待功能测试验证