1、效果
话不多说,先来讲讲想要的效果:
java的数据表格删除数据时,并没有真正从数据库中永久的删除,而是还是在数据库中,只不过不显示在页面中。当在回收站页面上彻底删除操作时,才是真正的从数据库中删除数据,同时,在回收站也可以恢复数据。
添加一个回收站按钮,当删除数据时,会在回收站中显示
点开回收站,dialog+datagrid展示,提供恢复和彻底删除按钮
2、总体思路
- 以employee为例
- 在数据库的表格中新添一个属性isdelete(名字随意取,但是注意千万不要取delete),类型可以为bit或者bigint等等。
- 本例中类型选择的为bigint,所以在Employee的domain实体类中,新增一个字段Long isdelete;
- 字段取值为1和2,当为1时,表示未删除,在正常展示,当为2时,表示被删除,只在回收站中展示。
- 通过.eq()比较在Specification中设置规则(下面EmployeeQuery代码中详细介绍)
- 前台设置删除,恢复,彻底删除这几个按钮,对应的在controller中设置相应的路径和对应的方法
3、后台代码
3.1、domain
在Employee类中添加 **private Long isdelete;**字段,同时get和set方法。
3.2、BaseQuery
在BaseQuery中新添加一个抽象方法,createSpecificatio用于展示正常数据,createSpecificationRe用于展示回收站的数据。
也可以写在一个里面,增加判断。偷个懒,多写一个。
public abstract Specification createSpecification();
public abstract Specification createSpecificationRe();
3.3、EmployeeQuery
同时在EmployeeQuery中添加 private Long isdelete;字段,get和set方法。
重写createSpecificatio和createSpecificationRe方法:
isdelete = 1L,正常展示
@Override
public Specification createSpecification() {
Specification<Employee> specification = Specifications.<Employee>and()
.like(StringUtils.isNotBlank(username), "username", "%" + username + "%")
.like(StringUtils.isNotBlank(email), "email", "%" + email + "%")
.eq(departmentid!=null,"department.id",departmentid)
.eq(true,"isdelete",1L)
.build();
return specification;
}
isdelete = 2L,回收站展示
@Override
public Specification createSpecificationRe() {
Specification<Employee> specification = Specifications.<Employee>and()
.like(StringUtils.isNotBlank(username), "username", "%" + username + "%")
.like(StringUtils.isNotBlank(email), "email", "%" + email + "%")
.eq(departmentid!=null,"department.id",departmentid)
.eq(true,"isdelete",2L)
.build();
return specification;
}
3.4、BaseServiceImpl
queryPage正常查询展示
@Override
public Page<T> queryPage(BaseQuery query) {
//1、得到排序对象
Sort sort = query.createSort();
//2、得到分页对象
Pageable pageable = new PageRequest(query.getCurrentPage2(), query.getPageSize(), sort);
//3、得到查询规则
Specification spec = query.createSpecification();
return baseRepository.findAll(spec, pageable);
}
queryPage2回收站查询展示
@Override
public Page<T> queryPage2(BaseQuery query) {
//1、得到排序对象
Sort sort = query.createSort();
//2、得到分页对象
Pageable pageable = new PageRequest(query.getCurrentPage2(), query.getPageSize(), sort);
//3、得到查询规则
Specification spec = query.createSpecificationRe();
return baseRepository.findAll(spec, pageable);
}
3.5、EmployeeController
/page路径
调用queryPage正常查询展示
@RequestMapping("/page")
@ResponseBody
public UIPage<Employee> list(EmployeeQuery query) {
Page<Employee> page = employeeService.queryPage(query);
return new UIPage(page);
}
/recycle路径
调用queryPage2回收站查询展示
@RequestMapping("/recycle")
@ResponseBody
public UIPage<Employee> recycle(