项目练习服务端报错整理

173 阅读3分钟

1.关于Mybatis-plus的错误

问题:在运行服务器后,对页面进行增加的时候报了一下错误

image.png

解答: 在 MyBatis-Plus 中,super.save(dept) 的调用方式通常出现在自定义的 Service 实现类中。为了理解为什么使用 super 而不是 this,我们需要了解 MyBatis-Plus 的继承结构和 super 的作用。

1.MyBatis-Plus 的继承结构

在 MyBatis-Plus 中,通常会有一个自定义的 Service 实现类继承自 `ServiceImpl`。`ServiceImpl` 是 MyBatis-Plus 提供的一个通用 Service 实现类,它已经实现了许多常用的 CRUD 方法,比如 `save`、`remove`、`update` 等。

public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements DeptService {
    @Override
    public boolean save(Dept dept) {
        // 补全基础属性
        dept.setCreateTime(LocalDateTime.now());
        dept.setUpdateTime(LocalDateTime.now());

        // 调用父类的 save 方法
        return super.save(dept);
    }
}

2.super.save(dept) 的作用

  • super.save(dept) 调用了父类 ServiceImpl 中的 save 方法。ServiceImpl 中的 save 方法已经实现了将实体对象保存到数据库的逻辑。
  • 如果你使用 this.save(dept),它可能会调用当前类中的 save 方法,从而导致递归调用,最终导致栈溢出(StackOverflowError)。

3. 为什么不用 this

  • 如果你在当前类中重写了 save 方法,使用 this.save(dept) 会调用当前类的 save 方法,而不是父类的 save 方法。这会导致无限递归,因为你在 save 方法中又调用了 this.save(dept)
  • 使用 super.save(dept) 可以确保调用的是父类 ServiceImpl 中的 save 方法,而不是当前类中的 save 方法。

4. 总结

  • 使用 super.save(dept) 是为了确保调用父类 ServiceImpl 中的 save 方法,而不是当前类中的 save 方法。
  • 这样可以避免递归调用和潜在的栈溢出问题。
  • 如果你没有重写 save 方法,this.save(dept) 和 super.save(dept) 的效果是一样的,但为了代码的清晰性和避免潜在问题,建议使用 super.save(dept)

5. 代码示例

public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements DeptService {
    @Override
    public boolean save(Dept dept) {
        // 补全基础属性
        dept.setCreateTime(LocalDateTime.now());
        dept.setUpdateTime(LocalDateTime.now());

        // 调用父类的 save 方法
        return super.save(dept);
    }
}

2.ResultMap映射问题

映射问题.png

1. resultMap映射失败会造成什么问题

  1. 数据映射失败:MyBatis 无法将查询结果正确地映射到 Java 对象,导致返回的对象为 null 或部分字段为 null
  2. 前端页面卡住:如果前端依赖于后端返回的数据来渲染页面,而数据映射失败导致返回的数据不完整或为空,前端可能会因为无法正确处理这些数据而卡住或显示空白页面。

2.注意事项

  • 修正 resultMap

    • 确保 ofType 拼写正确。
    • 确保 column 和 property 的映射正确。
    • 确保 collection 标签正确闭合。
    • 注意resultMap的id是否与关联的一样
  • 修正 SQL 查询

    • 确保字段名与 resultMap 中的 column 匹配。
    • 修正表名和字段名的拼写错误(如 floop_id 和 poom id)。
    • 添加 WHERE 条件,根据状态过滤床位信息。
  • 检查前端代码

    • 确保前端代码能够正确处理 null 或不完整的数据。

3.定时器报错(调用目标异常)

定时错误.png

解决方案

定时.png

4. Mybatis异常错误

mybatis异常.png

解决方案

Snipaste_2025-02-26_14-58-51.png