java第三阶段第十二天--CureGuy

本文详细讲解了使用Mybatis和Mybatis Plus版本在Spring Boot中实现商品分类的增删改查操作,包括分类展示、分级查询优化和事务处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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、 删除成功展示

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值