1.数据库表的格式:
2.ItemCat的pojo对象
@Data
@Accessors(chain = true)
@TableName("item_cat")
public class ItemCat extends BasePojo{
@TableId(type = IdType.AUTO) //自增
private Integer id; //定义主键
private Integer parentId; //定义父级菜单 开启驼峰规则映射
private String name; //分类名称
private Boolean status; //分类状态 0 停用 1 正常
private Integer level; //商品分类等级 1 2 3
@TableField(exist = false)
private List<ItemCat> children; //是业务数据 不是数据库字段
}
3.业务层代码
@Override
public List<ItemCat> findItemcatlist(Integer level) {
QueryWrapper<ItemCat> itemCatQueryWrapper = new QueryWrapper<>();
itemCatQueryWrapper.eq("parent_id", 0);
List<ItemCat> OneList = itemcatMapper.selectList(itemCatQueryWrapper);
for(ItemCat OneItemCat : OneList){
//条件清空
itemCatQueryWrapper.clear();
//二级目录的父ID是一级目录的ID
itemCatQueryWrapper.eq("parent_id", OneItemCat.getId());
List<ItemCat> TwoList = itemcatMapper.selectList(itemCatQueryWrapper);
for(ItemCat TwoItemCat : TwoList){
//条件清空
itemCatQueryWrapper.clear();
//三级目录的父ID是二级目录的id
itemCatQueryWrapper.eq("parent_id", TwoItemCat.getId());
List<ItemCat> ThreeList = itemcatMapper.selectList(itemCatQueryWrapper);
TwoItemCat.setChildren(ThreeList);
}
OneItemCat.setChildren(TwoList);
}
return OneList;
}
4.业务层代码优化
//封装到map中
public Map<Integer,List<ItemCat>> getMap(){
//1.获取数据库中所有的数据
List<ItemCat> itemCatlist = itemcatMapper.selectList(null);
//2.将list集合数据封装到map集合中
Map<Integer,List<ItemCat>> map = new HashMap<>();
for(ItemCat itemCat : itemCatlist){
int parentid = itemCat.getParentId();
//判断map中是否已经有0或者1或者2
if(map.containsKey(parentid)){ //代表存在
map.get(parentid).add(itemCat);
}else { //代表不存在
List<ItemCat> temp = new ArrayList<>();
temp.add(itemCat);
map.put(parentid, temp);
}
}
return map;
}
//获取二级目录
public List<ItemCat> getTwoList(Map<Integer,List<ItemCat>> map){
//1.获取一级目录
List<ItemCat> Onelist = map.get(0);
//2.遍历一级目录封装二级目录
for(ItemCat itemCat:Onelist){
//获取一级目录的id作为子集的父id
int parentid = itemCat.getId();
List<ItemCat> Twolist = map.get(parentid);
itemCat.setChildren(Twolist);
}
return Onelist;
}
//获取三级目录
private List<ItemCat> getThreeList(Map<Integer, List<ItemCat>> map) {
//1.获取一级和二级目录
List<ItemCat> OneList = getTwoList(map);
for(ItemCat OneItem:OneList){
//2.获取二级目录
List<ItemCat> twoList = OneItem.getChildren();
//判断二级目录是否存在空值null
if(twoList == null){
continue;
}
for(ItemCat twoItemcat: twoList){
//获取二级的id作为三级的父id
int parentid = twoItemcat.getId();
//获取集合封装到二级的children
List<ItemCat> threeList = map.get(parentid);
twoItemcat.setChildren(threeList);
}
}
return OneList;
}
@Override
public List<ItemCat> findItemcatlist(Integer level) {
Map<Integer,List<ItemCat>> map = getMap();
if(level==1){
return map.get(1);
}
if(level==2){
return getTwoList(map);
}
return getThreeList(map);
}