一张表,id,name,pid,分为一级二级和三级对象,如何级联删除

最近一直在做电商的项目,一直都没有时间去分享一些使用代码。因为也是刚开始学习java,所以我更注重基础逻辑与业务。最近遇到个小难点,对于一些大神肯定是easy了。那就是级联删除。我最开始查了一下别人的代码,发现从各个角度都实现不了我的需求,于是我静下心来,写了一段纯逻辑的代码,希望大家遇到级联删除束手无策时能够给你一些便捷。
下面就是头脑风暴了,做好准备!
场景:一张表里面有id,name,pid,分为一级、二级和三级对象。
要求:删一级同时删除二级三级对象,删二级同时删除三级对象,删三级正常删除自己就行。
由简入难,下面是代码,关键步骤有多行单行注释进行解释。有不理解的,可以私信我,咱们一起探讨更简单的方法来实现。

/**
	 * 删除三级分类方法,已知传进来的是三级对象id
	 * @param id
	 * @param model
	 * @return
	 */
	@RequestMapping("toDeleteSort3")
	public String toDeleteSort3(String id,Model model) {
		try {
			int count = sortService.deleteByPrimaryKey(Integer.parseInt(id));
			return "redirect:/admin/sort/toclasslist?parentid=0";
		} catch (Exception e) {
			e.printStackTrace();
			model.addAttribute("msg", e.getMessage());
			return "redirect:/admin/sort/toclasslist?parentid=0";
		}
	}
	/**
	 * 删除二级分类方法,先找对应三级删除,然后删除二级。已知传进来的是二级对象id
	 * @param id
	 * @param model
	 * @return
	 */
	@RequestMapping("toDeleteSort2")
	public String toDeleteSort2(String id,Model model) {
		//得到三级对象,此方法是查询pid等于此id的三级对象方法
		List<Sort> listSort3 = sortService.findAllSort(Integer.parseInt(id));
		if(listSort3 == null) {
			try {
				int count = sortService.deleteByPrimaryKey(Integer.parseInt(id));
				return "redirect:/admin/sort/toclasslist?parentid=0";
			} catch (Exception e) {
				e.printStackTrace();
				model.addAttribute("msg", e.getMessage());
				return "redirect:/admin/sort/toclasslist?parentid=0";
			}
		}
		sortService.deletesort3(Integer.parseInt(id));//删除对应三级,此方法是删除oid等于此id的对象的方法
		try {
			int count = sortService.deleteByPrimaryKey(Integer.parseInt(id));
			return "redirect:/admin/sort/toclasslist?parentid=0";
		} catch (Exception e) {
			e.printStackTrace();
			model.addAttribute("msg", e.getMessage());
			return "redirect:/admin/sort/toclasslist?parentid=0";
		}
	}
	/**
	 * 删除一级分类方法,先找对应二级,然后找对应三级,删除三级,再删二级,最后删一级。已知传进来的是一级对象id
	 * @param id
	 * @param model
	 * @return
	 */
	@RequestMapping("toDeleteSort")
	public String toDeleteSort(String id,Model model) {
		//得到所有二级分类对象
		List<Sort> listSort = sortService.findAllSort(Integer.parseInt(id));
		if(listSort == null) {
			try {//删除一级
				int count = sortService.deleteByPrimaryKey(Integer.parseInt(id));
				return "redirect:/admin/sort/toclasslist?parentid=0";
			} catch (Exception e) {
				e.printStackTrace();
				model.addAttribute("msg", e.getMessage());
				return "redirect:/admin/sort/toclasslist?parentid=0";
			}
		}
		//得到每个对象的id(二级id),先删除三级,然后删除二级
		for(Sort sort:listSort) {
			//得到三级对象,此方法是得到pid等于此id的三级对象集合
			List<Sort> listSort3 = sortService.findAllSort(sort.getId());
			if(listSort3 == null) {
				try {//删除二级对象
					int count = sortService.deleteByPrimaryKey(sort.getId());
				} catch (Exception e) {
					e.printStackTrace();
					model.addAttribute("msg", e.getMessage());
				}
			}
			sortService.deletesort3(sort.getId());//删除对应三级,此方法是用二级id也就是三级的pid删除二级下的三级对象方法
			try {
				int count = sortService.deleteByPrimaryKey(sort.getId());			
			} catch (Exception e) {
				e.printStackTrace();
				model.addAttribute("msg", e.getMessage());
			}
		}
		try {//删除一级
			int count = sortService.deleteByPrimaryKey(Integer.parseInt(id));
			return "redirect:/admin/sort/toclasslist?parentid=0";
		} catch (Exception e) {
			e.printStackTrace();
			model.addAttribute("msg", e.getMessage());
			return "redirect:/admin/sort/toclasslist?parentid=0";
		}
	}

我目前确实没看懂别人写的级联删除,也听说有用触发器在sql里面进行判断的,但是时间有限感觉写这一段比现学触发器时间用的短。以后有时间学会了再和大家分享更简单快捷的方法。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值