在DeptController.java编写如下代码,因为前端传送过来的是含有id和name的JSON格式,因此我们用Dept来封装数据,并加上@RequestBody注解。在Controller层调用Service层update.
@PutMapping("/depts")
public Result update(@RequestBody Dept dept) {
log.info("修改部门:{}",dept);
deptService.update(dept);
return Result.success();
}
接下来在接口
DeptService定义方法
void update(Dept dept);
然后在实现类里实现update方法
@Override
public void update(Dept dept) {
dept.setUpdateTime(LocalDateTime.now());
deptMapper.update(dept);
}
最后在DeptMapper编写更新语句
@Update("update dept set name = #{name} ,update_time = #{updateTime} where id = #{id}")
void update(Dept dept);
一开始我就是这么写的,自以为大功告成,肯定能成功,因为在ApiFox上测试成功的,然而在我打开页面去试了一下发现,编辑部门变成新增部门,让我很困惑。后来我打开开发者工具,发现点击“编辑”按钮时,前端控制台报错“Method is not allowed”.并且我还发现当我点击"编辑"按钮时,前端发来的请求是带有路径参数id的,这个id是部门id,而且也没有做到回显的功能。所以分析可以知道我们应该先写一个根据ID查询部门的功能
话不多说,开干!
老套路,现在Controller层写
@GetMapping("/depts/{id}")
public Result selectById(@PathVariable Integer id) {
log.info("根据Id查询:{}",id);
Dept dept = deptService.selectById(id);
return Result.success(dept);
}
注意这里是GET请求,并且前端会传来路径参数,因此我们要用上@PathVariable注解来获取参数id。
然后在DeptService的接口定义selectById方法
Dept selectById(Integer id);
然后在实现类里实现该方法
@Override
public Dept selectById(Integer id) {
return deptMapper.selectById(id);
}
最后在DeptMapper里编写根据ID查询的SQL语句
@Select("select id,name from dept where id = #{id}")
Dept selectById(Integer id);
这下大功告成了。去测试一下发现不仅有了回显功能,编辑功能也正常了,试一下把“咨询部”改成“干饭部”
然后看看界面,确实改过来了
如果还不放心,我们可以去数据库看看
需要注意的是更新语句里的表名别写错了,我就是表名写错,检查半天才检查出来,因为我在日志里的SQL语句看到更新的是emp表。