1 、左侧菜单的商品分类mybatis版本
1.1 、展示商品分类的信息
1.1.1、 编辑controller类
@RestController
@CrossOrigin
@RequestMapping("/itemCat")
public class ItemCatController {
@Autowired
private ItemCatService itemCatService;
// url:/itemCat/findItemCatList/3
@GetMapping("/findItemCatList/{level}")
public SysResult findItemCatList(@PathVariable Integer level){
List<ItemCat> itemCatList=itemCatService.findItemCatList(level);
return SysResult.success(itemCatList);
}
1.1.2、 编辑service
@Service
@Data
public class ItemCatServiceImpl implements ItemCatService {
@Autowired
private ItemCatMapper itemCatMapper;
@Override
public List<ItemCat> findItemCatList(Integer level) {
return itemCatMapper.findItemCatList(level);
}
1.1.3、 编辑xml文件
<select id="findItemCatList" resultType="ItemCat">
SELECT * FROM item_cat
</select>
1.1.4、 商品分类展示
1.2、 新增商品分类
1.2.1、 编辑controller类
//请求路径: /itemCat/saveItemCat
//请求类型: post
@PostMapping("/saveItemCat")
public SysResult saveItemCat(@RequestBody ItemCat itemCat){
itemCatService.saveItemCat(itemCat);
return SysResult.success();
}
1.2.2、 编辑service
@Override
@Transactional
public void saveItemCat(ItemCat itemCat) {
itemCat.setStatus(true);
itemCat.setCreated(new Date());
itemCat.setUpdated(new Date());
itemCatMapper.saveItemCat(itemCat);
}
1.2.3、 编辑xml文件
<insert id="saveItemCat" >
insert into item_cat(id,parent_id,name,status,level,created,updated)
values (null,#{parentId},#{name},#{status},#{level},#{created},#{updated})
</insert>
1.2.4、 新增展示
1.3、 状态修改
1.3.1、编辑controller类
//请求路径: /itemCat/status/{id}/{status}
///itemCat/status/${itemCat.id}/${itemCat.status}
//请求类型: put
@PutMapping("/status/{id}/{status}")
public SysResult updateStatus(ItemCat itemCat){
itemCatService.updateStatus(itemCat);
return SysResult.success();
}
1.3.2、 编辑service
@Override
public void updateStatus(ItemCat itemCat) {
itemCatMapper.updateStatus(itemCat);
}
1.3.3、 编辑写xml文件
<update id="updateStatus" >
update item_cat set status=#{status} where id=#{id}
</update>
1.3.4、 修改状态展示
1.4、 修改商品分类的分类名称
1.4.1、编辑controller类
//请求路径: /itemCat/updateItemCat
//请求类型: put
@PutMapping("/updateItemCat")
public SysResult updateItemCat(@RequestBody ItemCat itemCat){
itemCatService.updateItemCat(itemCat);
return SysResult.success();
}
1.4.2、 编辑service
@Override
public void updateItemCat(ItemCat itemCat) {
itemCat.setUpdated(new Date());
itemCatMapper.updateItemCat(itemCat);
}
1.4.3、 编辑写xml文件
<update id="updateItemCat">
update item_cat set name=#{name},updated=#{updated}
where id=#{id}
</update>
1.4.4、 修改商品分类展示
编辑之后:
2 、左侧菜单的商品分类mybatis-plus版本
2.1 、分级展示商品分类的信息
2.1.1、 编辑controller类
@RestController
@CrossOrigin
@RequestMapping("/itemCat")
public class ItemCatController {
@Autowired
private ItemCatService itemCatService;
// url:/itemCat/findItemCatList/3
@GetMapping("/findItemCatList/{level}")
public SysResult findItemCatList(@PathVariable Integer level){
List<ItemCat> itemCatList=itemCatService.findItemCatList(level);
return SysResult.success(itemCatList);
}
2.1.2、 编辑service
@Override
public List<ItemCat> findItemCatList(Integer level) {
//分级查询方法一:由于多次循环遍历查询数据库,导致数据库查询次数太多效率低容易宕机
//查询一级商品分类信息
QueryWrapper<ItemCat> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("parent_id", 0);
List<ItemCat> oneList =itemCatMapper.selectList(queryWrapper);
//查询二级商品分类信息
for(ItemCat oneItemCat: oneList){
queryWrapper.clear();
queryWrapper.eq("parent_id", oneItemCat.getId());
List<ItemCat> twoList=itemCatMapper.selectList(queryWrapper);
//查询三级商品分类信息
for(ItemCat twoItemCat: twoList){
queryWrapper.clear();
queryWrapper.eq("parent_id", twoItemCat.getId());
List<ItemCat> threeList=itemCatMapper.selectList(queryWrapper);
twoItemCat.setChildren(threeList);//三级结果
}
oneItemCat.setChildren(twoList);//二级结果
}
return oneList;//一级结果
}
对分级方法一优化:
/*
* 有效降低查询数据库的次数
* 思路:获取所有的数据库记录,之后按照父子级的关系进行封装
* 数据结构:map集合<k,v> k不允许重复
* Map<parentId,List当前父级的子级信息(不嵌套 children为空)>
* 例子:Map<0,List[{id=1,name="**",chikdren=null},........]>
*封装数据规则:1.遍历所有的数据;2.获取parentId;3.存数据
* */
@Service
@Data
public class ItemCatServiceImpl implements ItemCatService {
@Autowired
private ItemCatMapper itemCatMapper;
@Override
public List<ItemCat> findItemCatList(Integer level) {
//分级查询方法二
// 有效降低查询数据库的次数
// 思路:获取所有的数据库记录,之后按照父子级的关系进行封装
// 数据结构:map集合<k,v> k不允许重复
// Map<parentId,List当前父级的子级信息(不嵌套 children为空)>
// 例子:Map<0,List[{id=1,name="**",chikdren=null},........]>
// 封装数据规则:
// 1.遍历所有的数据,如果该数据的父级不存在,准备list集合,将自己作为第一个元素
// 2.获取parentId,如果该数据的父级存在,获取list集合,将自己作为追加到之前的集合里
// 3.判断parentId是否存在,实现数据的封装
Map<Integer,List<ItemCat>> map=getMap();
//得到一级商品信息
if (level==1) { return map.get(0); }//获取1级菜单信息
if (level==2) {return getTwoList(map);}//获取1级和2级菜单信息
return getThreeList(map);//获取123级菜单信息
}
//该方法用来获取一级二级菜单信息
public List<ItemCat> getTwoList(Map<Integer,List<ItemCat>> map){
//1.先查询一级菜单信息
List<ItemCat>oneList =map.get(0);
//2.遍历每个一级菜单去封装二级菜单
for (ItemCat oneItemCat :oneList ){
int parentId = oneItemCat.getId();//二级的parentId是一级的id
//查询二级数据
List<ItemCat> twoList=map.get(parentId);
//封装
oneItemCat.setChildren(twoList);
}
return oneList;
}
//该方法用来获取一级二级三级菜单信息
public List<ItemCat> getThreeList(Map<Integer,List<ItemCat>> map){
List<ItemCat> twoList = getTwoList(map);
for (ItemCat twoItemCat : twoList){
if(twoItemCat.getChildren() !=null){
for(ItemCat threeItemCat :twoItemCat.getChildren()){
List<ItemCat> threeList = map.get(threeItemCat.getId());//查询三级数据
threeItemCat.setChildren(threeList);
}
}
}
return twoList;
}
public Map<Integer,List<ItemCat>> getMap(){
Map<Integer,List<ItemCat>> map=new HashMap<>();//初始化map
//为null查询所有的数据库记录
List<ItemCat> list=itemCatMapper.selectList(null);
//实现数据的封装
//1.遍历数据
for(ItemCat itemCat:list){
//拿到parent_id
int parentId = itemCat.getParentId();
if(map.containsKey(parentId)){
//表示数据存在
map.get(parentId).add(itemCat);
}else {
//key不存在,定义list集合 将自己作为第一个元素追加
List<ItemCat> childrenList=new ArrayList<>();
childrenList.add(itemCat);
//将数据保存到map集合中
map.put(parentId, childrenList);
}
}
return map;
}
2.1.3、 编辑xml文件
<select id="findItemCatList" resultType="ItemCat">
SELECT * FROM item_cat
</select>
2.1.4、 商品分类展示
2.2、 删除商品分类信息
2.2.1、 编辑controller类
/**
* 业务需求: 实现商品分类删除
* URL: /itemCat/deleteItemCat?id=xx&level=2
* 参数: id/level
* 返回值: SysResult对象
*/
@DeleteMapping("/deleteItemCat")
public SysResult deleteItemCat(ItemCat itemCat){
itemCatService.deleteItemCat(itemCat);
return SysResult.success();
}
2.2.2、 编辑service
@Override
@Transactional
public void deleteItemCat(ItemCat itemCat) {
if(itemCat.getLevel() == 3){
itemCatMapper.deleteById(itemCat.getId());
return;
}
if(itemCat.getLevel() == 2){
QueryWrapper<ItemCat> delete2=new QueryWrapper<>(itemCat).eq("parent_id", itemCat.getId());
itemCatMapper.delete(delete2);
itemCatMapper.deleteById(itemCat.getId());
}
if(itemCat.getLevel() == 1){
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("parent_id", itemCat.getId());
List<ItemCat> list2 = itemCatMapper.selectList(queryWrapper);
for (ItemCat itemCat2 : list2){
QueryWrapper<ItemCat> queryWrapperTemp = new QueryWrapper<>();
queryWrapperTemp.eq("parent_id", itemCat2.getId());
itemCatMapper.delete(queryWrapperTemp);
itemCatMapper.deleteById(itemCat2.getId());
}
itemCatMapper.deleteById(itemCat.getId());
}
}
2.2.3、 删除成功展示