package com.jt.pojo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
@Data
@Accessors(chain = true)
@TableName("item_cat")
public class ItemCat extends basePojo{
private Integer id;
public Integer parentId;
private String name; //分类名称
private Boolean status; //分类状态 0 停用 1 正常
private Integer level; //商品分类等级 1 2 3
@TableField(exist = false)
//用于存放2.3级菜单
private List children;
}
1.2创建持久层接口实现baseMapperpackage com.jt.mapper; import com.baomidou.mybatisplus.core.mapper.baseMapper; import com.jt.pojo.ItemCat; public interface ItemCatMapper extends baseMapper1.3创建业务层Service{ }
package com.jt.service;
import com.jt.pojo.ItemCat;
import java.util.List;
public interface ItemCatService {
List findAll();
List findItemCatList(Integer level);
}
1.4创建接口实现类实现具体业务逻辑
package com.jt.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jt.mapper.ItemCatMapper;
import com.jt.pojo.ItemCat;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class ItemCatServiceImpl implements ItemCatService{
@Autowired
private ItemCatMapper itemCatMapper;
@Override
public List findAll() {
return itemCatMapper.selectList(null);
}
@Override
public List findItemCatList(Integer level) {
//将所有数据封装在集合中
Map> map = map();
//如果level=1 只获取一级.
if(level==1) return map.get(0);
//如果level=2 获取一级,一级嵌套二级
if (level==2)return getTwoList(map);
//如果level=3 获取一级,一级嵌套二级,二级嵌套三级.
List list = getThreeList(map);
return list;
}
private List getThreeList(Map> map) {
//获取一级和二级菜单
List twoList = getTwoList(map);
//遍历一级菜单
for (ItemCat itemCat : twoList) {
//获取一级菜单中有二级的菜单
List children = itemCat.getChildren();
//判断有没有二级没有的话需要退出本次循环进行下一次循环
if(children.size()==0||children==null){
continue;
}
//遍历二级菜单
for (ItemCat child : children) {
int parentId = child.getId();
//获取3级菜单
List threeList = map.get(parentId);
//将3级菜单封装在二级中
child.setChildren(threeList);
}
}
return twoList;
}
private List getTwoList(Map> map) {
//获取一级
List itemCatList = map.get(0);
//遍历一级
for (ItemCat itemCat : itemCatList) {
//获取一级菜单的ID
int Id = itemCat.getId();
//查询二级
List itemCatList2 = map.get(Id);
//将二级封装在一级菜单的集合中
itemCat.setChildren(itemCatList2);
}
//返回一级
return itemCatList;
}
//获取整张表的数据将其封装在集合中
private Map> map() {
//创建封装容器
Map> map = new HashMap<>();
//获取所有数据
List itemCatList = itemCatMapper.selectList(null);
//遍历数据
for (ItemCat itemCat : itemCatList) {
//获取parentId
int parentId= itemCat.getParentId();
//判断parentId是否已经存在集合中,如果存在,将其追加在集合后面
if(map.containsKey(parentId)){
map.get(parentId).add(itemCat);
//如果不存在需要创建一个集合存放
}else {
//创建集合
ArrayList childrenList = new ArrayList<>();
//将数据存放
childrenList.add(itemCat);
//将ID和集合放入Map中
map.put(parentId,childrenList);
}
}
//返回具体数据
return map;
}
}
1.5创建ItemCatController类
package com.jt.controller;
import com.jt.pojo.ItemCat;
import com.jt.service.ItemCatService;
import com.jt.vo.SysResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@CrossOrigin
@RequestMapping("/itemCat")
public class ItemCatController {
@Autowired
private ItemCatService itemCatService;
@GetMapping("/findAll")
public List findAll(){
return itemCatService.findAll();
}
@GetMapping("/findItemCatList/{level}")
public SysResult findItemCatList(@PathVariable Integer level){
//使用List集合接收参数
List itemCatList = itemCatService.findItemCatList(level);
return SysResult.success(itemCatList);
}
}
1.6实现效果
2.实现商品状态的修改
2.1在ItemCatController类中创建修改状态的控制层
@PutMapping("/status/{id}/{status}")
public SysResult updateStatus(ItemCat itemCat){
itemCatService.updateStatus(itemCat);
return SysResult.success();
}
2.2在ItemCatServiceImpl实现类中实现具体业务
@Override
@Transactional //事务控制
public void updateStatus(ItemCat itemCat) {
itemCatMapper.updateById(itemCat);
}
3.实现商品的新增
3.1在ItemCatController类中控制层
@PostMapping("/saveItemCat")
public SysResult saveItemCat(@RequestBody ItemCat itemCat){
itemCatService.saveItemCat(itemCat);
return SysResult.success();
}
3.2在ItemCatServiceImpl实现类中实现具体业务
@Override
@Transactional
public void saveItemCat(ItemCat itemCat) {
itemCat.setStatus(true) ;
itemCatMapper.insert(itemCat);
}
4.实现商品分类的修改
4.1在ItemCatController类中控制层
@PutMapping("/updateItemCat")
public SysResult updateItemCat(@RequestBody ItemCat itemCat){
itemCatService.updateItemCat(itemCat);
return SysResult.success();
}
4.2在ItemCatServiceImpl实现类中实现具体业务
@Override
@Transactional
public void updateItemCat(ItemCat itemCat) {
itemCatMapper.updateById(itemCat);
}
5.删除菜单
5.1在ItemCatController类中控制层
@DeleteMapping("/deleteItemCat")
public SysResult deleteItemCats(ItemCat itemCat){
itemCatService.deleteItemCats(itemCat);
return SysResult.success();
}
5.2在ItemCatServiceImpl实现类中实现具体业务
@Override
@Transactional
public void deleteItemCats(ItemCat itemCat) {
int level = itemCat.getLevel();
if(level == 3){
//表示需要删除的数据是三级菜单,可以直接删除
itemCatMapper.deleteById(itemCat.getId());
}
if(level == 2){
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("parent_id",itemCat.getId())
.or()
.eq("id",itemCat.getId());
itemCatMapper.delete(queryWrapper);
}
if(level == 1){
//1.必须获取二级ID
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("parent_id",itemCat.getId());
//2获取结果的第一列字段(主键) 二级Id
List twoIdsList = itemCatMapper.selectObjs(queryWrapper);
//3.删除三级的数据
queryWrapper.clear();
//删除parent_id中包含二级Id的数据,实则删除的是三级数据
queryWrapper.in(twoIdsList.size()>0,"parent_id",twoIdsList)
.or()
//删除parent_id 等于一级ID的,实则删除的是二级数据
.eq("parent_id",itemCat.getId())
.or()
//删除id=一级Id 则删除一级数据.
.eq("id",itemCat.getId() );
itemCatMapper.delete(queryWrapper);
}
}



