1.关于Mybatis-plus的错误
问题:在运行服务器后,对页面进行增加的时候报了一下错误
解答:
在 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映射问题
1. resultMap映射失败会造成什么问题
- 数据映射失败:MyBatis 无法将查询结果正确地映射到 Java 对象,导致返回的对象为
null或部分字段为null。 - 前端页面卡住:如果前端依赖于后端返回的数据来渲染页面,而数据映射失败导致返回的数据不完整或为空,前端可能会因为无法正确处理这些数据而卡住或显示空白页面。
2.注意事项
-
修正
resultMap:- 确保
ofType拼写正确。 - 确保
column和property的映射正确。 - 确保
collection标签正确闭合。 - 注意resultMap的id是否与关联的一样
- 确保
-
修正 SQL 查询:
- 确保字段名与
resultMap中的column匹配。 - 修正表名和字段名的拼写错误(如
floop_id和poom id)。 - 添加
WHERE条件,根据状态过滤床位信息。
- 确保字段名与
-
检查前端代码:
- 确保前端代码能够正确处理
null或不完整的数据。
- 确保前端代码能够正确处理