一、SQL 语法类问题(最致命,直接导致 500 报错)

  1. 字段错误:查询 / 删除时用了表中不存在的字段
    • 例:setmeal表无setmeal_id,却写where setmeal_id = ?(实际是id);setmeal_dish表无create_time,却写order by create_time desc
  2. 关键字拼写错误:核心关键字写错导致语法解析失败
    • 例:delete from写成delete form(少写r)。
  3. 多余关键字:删除语句加了不必要的*
    • 例:delete * from setmealdelete后无需加*,直接删整行)。
  4. 表查询错误:套餐分页查询时,误查dish表(菜品表)而非setmeal表(套餐表)。

二、参数绑定类问题(导致查询 / 更新条件不生效、参数找不到)

  1. 参数名大小写 / 格式不一致:XML 参数名与接口 / DTO 字段不匹配
    • 例:XML 用#{SetmealId},接口参数是setmealId<if test="category_id != null">中用下划线,接口参数是驼峰categoryId
  2. @Param 注解缺失 / 错误:单个参数名与 XML 不一致,或多参数未加注解
    • 例:接口方法getDishesBySetmealId(Long setmealId),XML 用#{setmealId}但未加@Param(虽单参数可兼容,但易出错)。
  3. DTO 字段缺失:分页 / 查询 DTO 缺少对应条件字段(如SetmealPageQueryDTO未包含status,导致状态筛选不生效)。

三、功能逻辑类问题(导致功能无效、数据异常)

  1. 数据操作遗漏:批量删除套餐时,只删了setmeal_dish关联表,未删setmeal主表数据;更新套餐时,未先删除原有关联菜品就插入新菜品(导致重复)。
  2. 回显 / 更新无效
    • 页面回显:菜品查询报错(create_time字段不存在),导致套餐详情无法显示关联菜品;
    • 更新无效:SetmealMapperupdate方法未写全类名(parameterType="Setmeal"→应写全路径),导致更新 SQL 未执行。
  3. Controller 返回值错误
    • 分页查询未将PageResult传入Result.success()(前端拿不到数据);
    • 泛型不匹配(如返回Result<Setmeal>却实际返回PageResult)。
  4. 基础字段未赋值:新增 / 更新套餐时,未设置createTimeupdateTimecreateUserupdateUser(数据不完整)。

四、配置类问题(导致数据映射失败)

  • 未开启 MyBatis「下划线→驼峰」自动映射,导致数据库category_id无法映射到 VO 的categoryId,字段值为null(前端无法渲染)。

核心避坑提醒(后续开发可直接套用)

  1. SQL 写好后,先核对「表名、字段名」是否与数据库一致(尤其是关联表和主键字段);
  2. 接口、XML、DTO 的参数名统一用「驼峰命名」(如setmealId),避免大小写 / 下划线混淆;
  3. 新增 / 更新操作必加「基础字段」(时间、操作人),删除 / 更新必加「WHERE 条件」(避免删全表 / 更全表);
  4. 功能测试前,先看后端日志(DEBUG/SQL 日志),确认 SQL 是否正确执行、参数是否传递到位。
posted on 2025-12-27 17:23  fafrkvit  阅读(0)  评论(0)    收藏  举报