树形表结构如下
parent_id指向父级分类主键, 整体结构类似磁盘文件夹形式
业务处理
service接口, 继承mabatis-plus生成IService包含基本的curd方法
public interface ParentFlService extends IService<TblParentFl> {
List<TblParentFlVO> getFlList();
}
service实现类; 查询使用lamabda表达式语句查询列表
public class ParentFlServiceImpl extends ServiceImpl<TblParentFlMapper,TblParentFl> implements ParentFlService {
@Override
public List<TblParentFlVO> getFlList() {
LambdaQueryWrapper<TblParentFl> wrapper = new QueryWrapper<TblParentFl>().lambda()
.eq(TblParentFl::getParentId, 0)
.eq(TblParentFl::getInvalid, 0)
.orderByDesc(TblParentFl::getScore);//lambda表达式; jdk1.8新特性;
List<TblParentFlVO> parentList = CopyUtil.copyList(this.list(wrapper), TblParentFlVO.class);//父类列表查询; 只是一个简单的条件查询
//查询子类类目
List<TblParentFlVO> tblParentFlVOList = getChildCategory(parentList);//查询子类
return tblParentFlVOList;
}
/**
* 查询子类目
* @param flVOS
* @return List<MallCategoryVO>
*/
private List<TblParentFlVO> getChildCategory(List<TblParentFlVO> flVOS) {
List<TblParentFlVO> tblParentFlVOList = new ArrayList<>();//创建树形新的容器
flVOS.forEach(mallCategoryVO -> {
//查询子类
LambdaQueryWrapper<TblParentFl> wrapper = new QueryWrapper<TblParentFl>().lambda()
.eq(TblParentFl::getParentId, mallCategoryVO.getId())
.eq(TblParentFl::getInvalid, 0)
.orderByDesc(TblParentFl::getScore);
List<TblParentFl> childList = this.list(wrapper);//查询二级
//赋值并递归调用
if (CollectionUtils.isNotEmpty(childList)) {//不为空时进行赋值存储操作,并且调用自身.参数为查询出的该list
List<TblParentFlVO> childListVO = CopyUtil.copyList(childList, TblParentFlVO.class);
mallCategoryVO.setChildList(childListVO);
//if (!mallCategoryVO.getParentId().equals(0L)){
getChildCategory(childListVO);
}
tblParentFlVOList.add(mallCategoryVO);//回调之后进行装配
}
);
return tblParentFlVOList;//循环结束返回
}
}
最后生成tblParentFlVOList实体类类似于文件夹形式, childList为子类集合;