修改FurnService.java
public void update(Furn furn);
修改FurnServiceImpl.java,
@Override
public void update(Furn furn) {
//因为传入的furn 的字段不一定是完整的,所以使用updateByPrimaryKeySelective
furnMapper.updateByPrimaryKeySelective(furn);
}
@Test
public void update() {
Furn furn = new Furn();
furn.setId(1);
furn.setName("北欧风格小桌子~~");
furn.setMaker("小猪家居");
//因为imgPath属性有一个默认值,
//所以如果我们不希望生成update 语句有对imgPath 字段修改,就显式的设置null
furn.setImgPath(null);
furnService.update(furn);
System.out.println("修改OK");
}
@PutMapping("/update")
@ResponseBody
public Msg update(@RequestBody Furn furn) {
furnService.update(furn);
return Msg.success();
}
handleEdit(row) {
//说明
//1. JSON.stringify(row) 将row 转成json 字符串
//2. JSON.parse(xx) 将字符串转成json 对象
//3. 为什么这样做? 其实JSON.parse(JSON.stringify(row)) 就是对row 进行了深拷贝
//4. 这样表格中的行数据和弹出框的数据就是独立的了
this.form = JSON.parse(JSON.stringify(row))
this.dialogVisible = true
}
//触发handleEdit 方法
编辑
可以测试一下, 点击编辑, 回显数据
save() {
//增加处理修改逻辑
if (this.form.id) {
request.put("/api/update", this.form).then(res => {
if (res.code === 200) {//如果code 为200
this.$message({ //弹出更新成功的消息框
type: "success",
message: "更新成功"
})
} else {
this.$message({//弹出更新失败信息
type: "error",
message: res.msg
})
}
this.list() //刷新列表
this.dialogVisible = false
})
} else {//添加
//=======说明======
//1. 将form 表单提交给/api/save 的接口
//2. /api/save 等价http://localhost:10001/save
//3. 如果成功,就进入then 方法
//4. res 就是返回的信息
//5. 查看Mysql 看看数据是否保存
request.post("/api/save", this.form).then(res => {
this.dialogVisible = false
this.list()
})
}
}
1.使用可以在外部获取组件内的数据,值为scope,那么由scope.row就可以得到数据了,根据得到的数据执行业务处理。。
2.调用list() 刷新数据需要注意的地方说明
list在添加数据时,显示页面不会马上更新需要手动刷新,数据库的数据在完成操作时会联动更新。因为异步处理,put发出请求本质是一个回调,当request发出put请求后,箭头函数对应的是一个回调机制。意思是说如果是异步的话,把对应的数据发过去不会等到回调函数结束就直接往下走,直接执行下面的lis刷新。而你操作的那一条数据有可能还没有修改到数据库。这就解释了为什么没有报错对话框就消失了,list因为他刷新时没有看到最新数据,取得还是上一次的数据。因为他是异步的,所以不会等回调,他是两条线执行,他直接往下走,等另一个接收请求处理完回到回调函数时,list方法早就执行完毕了。所以有可能没有拿到最新数据。他在本地执行,速度比回调快多了,所以往往拿不到。我们只要把代码拿上去,放在回调里面就可以了。
修改FurnService.java
public void del(Integer id);
修改FurnServiceImpl.java
@Override
public void del(Integer id) {
furnMapper.deleteByPrimaryKey(id);
}
2.修改FurnServiceTest.java ,测试del.
@Test
public void del() {
furnService.del(1);
System.out.println("del ok");
}
@DeleteMapping("/del/{id}")
@ResponseBody
public Msg del(@PathVariable Integer id) {
System.out.println("del id= " + id);
furnService.del(id);
return Msg.success();
}
handleDel(id) {
// console.log("id-", id)
request.delete("/api/del/" + id).then(res => {
if (res.code === 200) {//删除成功
//提示一个成功的消息框
this.$message(
{
type: "success",
message: res.msg
}
)
} else { //删除失败
//提示一个错误的消息框
this.$message(
{
type: "error",
message: res.msg
}
)
}
//刷新页面数据
this.list()
})
}
编辑
删除
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ticBhXKt-1691216417785)(https://gitee.com/nlcwyx/imags/raw/master/imags/202308011637705.png)]
<dependency>
<groupId>com.github.pagehelpergroupId>
<artifactId>pagehelperartifactId>
<version>5.2.1version>
dependency>
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<property name="reasonable" value="true"/>
plugin>
plugins>
/**
* 分页请求接口
*
* @param pageNum: 要显示第几页 : 默认为1
* @param pageSize: 每页要显示几条记录:默认为5
* @return
*/
@ResponseBody
@RequestMapping("/furnsByPage")
public Msg listFurnsByPage(@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "5") Integer pageSize) {
//设置分页参数
//解读
//1.调用findAll是完成查询,底层会进行物理分页,而不是逻辑分页
//2.会根据分页参数来计算 limit ?, ?, 在发出SQL语句时,会带limit
//3.我们后面会给大家抓取SQL
PageHelper.startPage(pageNum, pageSize);
List<Furn> furnList = furnService.findAll();
//将分页查询的结果,封装到PageInfo
//PageInfo 对象包含了分页的各个信息,比如当前页面pageNum , 共有多少记录
//...
PageInfo pageInfo = new PageInfo(furnList, pageSize);
//将pageInfo封装到Msg对象,返回
return Msg.success().add("pageInfo", pageInfo);
}
//增加element-plus 分页控件
启动项目后台服务furns_ssm
启动项目前台ssm_vue
测试分页显示效果, 浏览器: http://localhost:9875/