一二三级目录的增删改查

 Controller

@RestController
@CrossOrigin
@RequestMapping("/itemCat")
public class ItemCatController {@Autowiredprivate ItemCatService itemCatService;/*** 需求: 查询3级商品分类列表信息* URL:  /itemCat/findItemCatList/{level}* 参数:  level 查询的层级* 返回值: SysResult对象(List)*/@GetMapping("/findItemCatList/{level}")public SysResult findItemCatList(@PathVariable Integer level){List itemCatList = itemCatService.findItemCatList(level);return SysResult.success(itemCatList);}/*** 业务需求: 实现状态的修改* 1.URL: /itemCat/status/{id}/{status}* 2.请求类型: put* 3.返回值: SysResult对象*/@PutMapping("/status/{id}/{status}")public SysResult updateStatus(ItemCat itemCat){itemCatService.updateStatus(itemCat);return SysResult.success();}/*** 需求: 实现商品分类入库* URL: /itemCat/saveItemCat* 类型: post类型* 参数: itemCat对象~~~JSON* 返回值: SysResult*/@PostMapping("/saveItemCat")public SysResult saveItemCat(@RequestBody ItemCat itemCat){itemCatService.saveItemCat(itemCat);return SysResult.success();}/*** 商品分类删除操作* URL:  /itemCat/deleteItemCat?id=1&level=3* 类型:  delete* 参数:  id/level* 返回值: SysResult对象*/@DeleteMapping("/deleteItemCat")public SysResult deleteItemCat(Integer id,Integer level){itemCatService.deleteItemCat(id,level);return SysResult.success();}}

 Service

@Service
public class ItemCatServiceImpl implements ItemCatService {@Autowiredprivate ItemCatMapper itemCatMapper;/*** 1.封装Map集合   Map>* 2.说明:  将所有的数据库的父子关系,进行封装.(没有嵌套!!!!)* 3.优势:  只查询一次数据库,就可以完成父子关系的封装.策略:*      1. key不存在, 准备一个新List集合,将自己当作第一个元素追加*      2. key存在,  获取原有list集合,将自己追加.**/public Map> initMap(){//Map中包含了所有的父子级关系.Map> map = new HashMap<>();//1.查询item_cat表中的所有的记录(1/2/3级菜单)List itemCatList = itemCatMapper.selectList(null);//2.实现数据的封装for(ItemCat itemCat : itemCatList){int key = itemCat.getParentId();if(map.containsKey(key)){ //存在List list = map.get(key);//将自己追加到其中list.add(itemCat);}else{  //不存在: 准备List集合,将自己作为第一个元素封装List list = new ArrayList<>();list.add(itemCat);map.put(key,list);}}//将封装的数据进行返回.return map;}/*** level 1 只查询一级商品分类*       2 查询一级/二级  嵌套封装*       3 查询一级/二级/三级   嵌套封装* @param level* @return*/@Overridepublic List findItemCatList(Integer level) {long startTime = System.currentTimeMillis();//Map集合里边封装的是所有的父子级关系.Map> map = initMap();if(level == 1){ //只获取1级菜单. parent_id = 0return map.get(0);}//用户查询1/2级商品分类信息if(level == 2){return getLevel2List(map);}//如果程序执行到这里,则说明用户查询的是1-2-3级菜单List list = getLevel3List(map);long endTime = System.currentTimeMillis();System.out.println("耗时:"+(endTime-startTime)+"毫秒");return list;}@Override@Transactionalpublic void updateStatus(ItemCat itemCat) {//id/statusitemCatMapper.updateById(itemCat);}@Override@Transactionalpublic void saveItemCat(ItemCat itemCat) {itemCat.setStatus(true);itemCatMapper.insert(itemCat);}/*** 1.易用性,性能高** @param id* @param level*/@Override@Transactional  //添加事务的控制public void deleteItemCat(Integer id, Integer level) {if(level == 3){itemCatMapper.deleteById(id);}if(level == 2){//1.先删除3级菜单QueryWrapper queryWrapper = new QueryWrapper();queryWrapper.eq("parent_id",id);itemCatMapper.delete(queryWrapper);//2.再删除2级菜单itemCatMapper.deleteById(id);}//如果程序执行到这一行 则需要先删除3级/再删除2级/最后删除1级if(level == 1){List ids = new ArrayList<>();//1.查询所有的二级菜单QueryWrapper queryWrapper = new QueryWrapper();queryWrapper.eq("parent_id",id);List twoList = itemCatMapper.selectList(queryWrapper);for (ItemCat twoItemCat : twoList){//删除3级菜单queryWrapper.clear();queryWrapper.eq("parent_id",twoItemCat.getId());//delete from item_cat where parent_id = "二级ID"itemCatMapper.delete(queryWrapper);//获取需要删除的ID信息ids.add(twoItemCat.getId());}//将所有的二级/一级ID封装到List集合中ids.add(id);itemCatMapper.deleteBatchIds(ids);}}public List getLevel3List(Map> map) {//1.先查询1-2级List oneList = getLevel2List(map);//2.遍历集合for(ItemCat oneItemCat : oneList){//获取二级集合信息List twoList = oneItemCat.getChildren();if(twoList == null || twoList.size() ==0){//当前一级菜单没有二级元素.结束本次循环,开始下一次!!!continue;}//该元素有二级,应该查询三级.for(ItemCat twoItemCat : twoList){List threeList = map.get(twoItemCat.getId());twoItemCat.setChildren(threeList);}}return oneList;}//查询一级和二级信息public List getLevel2List(Map> map) {//思路: 先查询一级,之后循环遍历,再次封装2级//1.获取一级List oneList = map.get(0);for(ItemCat oneItemCat : oneList){//2.如何根据一级查询二级? 通过Map集合获取List twoList = map.get(oneItemCat.getId());//3.实现了一级二级的封装oneItemCat.setChildren(twoList);}return oneList;}/*** 业务: 查询3级商品分类信息*      1. 一级中嵌套二级集合*      2. 二级菜单嵌套三级集合.** 1.0版本: for循环嵌套结构  暂时不考虑level 最好理解的* 常识:*      1.用户第一次查询数据库 需要建立链接.*      2.第二次查询 从链接池中动态获取链接 所以速度更快!!!**  思考: 该业务查询了多少次数据库??? 第一层循环10个  第二层循环10 总查询数=10*10=100次*       如何优化查询策略!!!!* @param level* @return*//* @Overridepublic List findItemCatList(Integer level) {//性能问题:!!!!!long startTime = System.currentTimeMillis();//1.查询一级商品分类信息QueryWrapper queryWrapper = new QueryWrapper<>();queryWrapper.eq("parent_id", 0);List oneList = itemCatMapper.selectList(queryWrapper);//2.查询二级商品分类信息  遍历一级集合for(ItemCat oneItemCat : oneList){queryWrapper.clear();   //清空条件queryWrapper.eq("parent_id", oneItemCat.getId());List twoList = itemCatMapper.selectList(queryWrapper);//3.查询三级商品分类信息  遍历for(ItemCat twoItemCat : twoList){queryWrapper.clear();queryWrapper.eq("parent_id", twoItemCat.getId());List threeList = itemCatMapper.selectList(queryWrapper);//将三级封装给二级twoItemCat.setChildren(threeList);}//3.将二级记录封装给一级oneItemCat.setChildren(twoList);}//记录程序的结束时间long endTime = System.currentTimeMillis();System.out.println("查询耗时:"+(endTime - startTime)+"毫秒");return oneList;}*/
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部