1.通用树形结构BaseTreeEntity
@Data
@JsonIgnoreProperties(value = {"handler"})
public class BaseTreeEntity extends BaseEntity {
/**
* 排序字段
*/
@TableField("`order`")
private Integer order;
/**
* ⽗节点id
*/
@TableField("`parent_id`")
private Long parentId;
/**
* 节点名称
*/
@TableField("`title`")
private String title;
/**
* 是否展开节点
*/
@TableField("`expand`")
private Boolean expand = false;
}
2.通用构造树方法
/**
* @Date 2021年11月6日
* @author 亦疏
*/
public class BuildTreeUtils<T extends BaseTreeDto> {
public List<T> buildTree(List<T> entities){
//根据parentId分组
Map<Long, List<T>> map = entities.stream().collect(Collectors.groupingBy(T::getParentId));
//节点指向各自的子节点
entities.forEach(e->e.setChildren(map.get(e.getId())));
//找出根节点
entities = entities.stream().filter(a->a.getParentId()==1).collect(Collectors.toList());
return entities;
}
}
3.通用BaseEntity
@Data
@JsonIgnoreProperties(value = {"handler"})
public abstract class BaseEntity implements Serializable {
/**
* 实体编号(唯⼀标识)
*/
@TableId(value = "`id`", type = IdType.AUTO)
protected Long id;
}
4.通用dao
@Data
public class BaseTreeDto extends BaseTreeEntity {
private List<? extends BaseTreeDto> children;
}
5.通用service
public interface ICrudService<T extends BaseEntity> extends IService<T> {
/**
* 分⻚查询⽅法
* @param entity
* @param pageNum
* @param pageSize
* @return
*/
PageInfo<T> listPage(T entity, int pageNum, int pageSize);
/**
* 查询所有⽅法
* @param entity
* @return
*/
List<T> list(T entity);
}
6.通用service实现类
public class CrudServiceImpl<T extends BaseEntity> extends
ServiceImpl<ICrudDao<T>, T> implements ICrudService<T> {
@Override
public PageInfo<T> listPage(T entity, int pageNum, int pageSize) {
return PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() ->
{
baseMapper.selectByPage(entity);
});
}
@Override
public List<T> list(T entity) {
return getBaseMapper().selectList(Wrappers.emptyWrapper());
}
}
7.通用控制器
public abstract class BaseController<S extends ICrudService<T>, T extends
BaseEntity> {
@Autowired
protected S service;
protected Logger log = LoggerFactory.getLogger(this.getClass());
/**
* 加载
*
* @param id
* @return
* @throws Exception
*/
@ApiOperation(value = "加载", notes = "根据ID加载")
@GetMapping("/edit/{id}")
public T edit(@PathVariable Long id) throws Exception {
T entity = service.getById(id);
afterEdit(entity);
return entity;
}
@ApiOperation(value = "分⻚查询", notes = "分⻚查询")
@PostMapping("/list-page")
public PageInfo<T> listPage(T entity,
@RequestParam(name = "page", defaultValue = "1",
required = false) int page,
@RequestParam(name = "rows", defaultValue = "10",
required = false) int rows) {
PageInfo<T> result = service.listPage(entity, page, rows);
return result;
}
@ApiOperation(value = "查询", notes = "根据实体条件查询")
@RequestMapping(value = "/list", method = {RequestMethod.POST,
RequestMethod.GET})
public List<T> list(T entity) {
List<T> list = service.list(entity);
return list;
}
/**
* 增加,修改
*/
@ApiOperation(value = "保存", notes = "ID存在修改,不存在添加")
@PostMapping("/save")
public ResponseBean save(T entity) throws Exception {
ResponseBean rm = new ResponseBean();
try {
beforeSave(entity); //保存前处理实体类
service.saveOrUpdate(entity);
rm.setModel(entity);
} catch (Exception e) {
e.printStackTrace();
rm.setSuccess(false);
rm.setMsg("保存失败");
}
return rm;
}
/**
* 删除
*/
@ApiOperation(value = "删除", notes = "根据ID删除")
@GetMapping("/delete/{id}")
public ResponseBean delete(@PathVariable Long id) throws Exception {
ResponseBean rm = new ResponseBean();
try {
service.removeById(id);
rm.setModel(null);
} catch (Exception e) {
e.printStackTrace();
rm.setSuccess(false);
rm.setMsg("保存失败");
}
return rm;
}
/**
* 批量删除
*/
@ApiOperation(value = "删除", notes = "批量删除")
@RequestMapping(value = "/delete", method = {RequestMethod.POST,
RequestMethod.GET})
public ResponseBean delete(@RequestParam List<Long> ids) {
ResponseBean rm = new ResponseBean();
try {
service.removeByIds(ids);
} catch (Exception e) {
e.printStackTrace();
rm.setMsg("删除失败");
rm.setSuccess(false);
}
return rm;
}
/**
* 保存前执⾏
*
* @param entity
* @throws Exception
*/
public void beforeSave(T entity) throws Exception {
}
/**
* 模板⽅法:在加载后执⾏
*
* @param entity
*/
public void afterEdit(T entity) {
}
}