Mysql递归查询树型结构实现代码

发布时间:2019-12-05编辑:脚本学堂
分享下mysql实现递归查询树型结构的一段代码,掌握下mysql递归查询的方法,有需要的朋友参考下。

本节内容:
mysql递归查询

表结构为:
 分类Id  SortId
 所属分类Id ParentID
 分类名称 SortName
 分类描述 SortDesc

测试数据:
 1000 0  A类  A类
 1001 1000 A类_1 A类_1
 1002 1000 A类_1 A类_1
 1003 1001 A类_1_1 A类_1_1
 2000 0  B类  B类
 2001 2000 B类_1 B类_1
 2002 2001 B类_1_1 B类_1_1
 2003 1002 A类_1_1 A类_1_1
 2004 2003 A类_1_1_1 A类_1_1_1

java代码:
 

复制代码 代码示例:

(SortBean类略)
 /**
  * 查询分类的树型结构
  */
 public void getSortList(List<SortBean> sortList, Long parentId,int level){ 

  SortBean bean = null;  
  List<SortBean> list = new ArrayList<SortBean>();  
  String sql = "Select * from sort_ s where s.parentId = ?";
  try{  
   System.out.println("sql:"+sql);
   list = (List<SortBean>)jdbcDao.queryBeanList(sql, SortBean.class, parentId);//每次查询出上级为的分类
   System.out.println(list.size());
   if(list != null && list.size() > 0){  
for(int i=0;i<list.size();i++){  
 bean = (SortBean)list.get(i); 
 bean.setLevel(level+1);   //添加等级字段
 sortList.add(bean);  
 getSortList(sortList,bean.getSortId(),level+1);   //递归查询
}  
   }else{  
level--;
   }
  }catch(Exception e){  
   e.printStackTrace();  
  }  
 }  
 

 
测试类: 
 

复制代码 代码示例:
public void test_getSortList() {
 
  SortService service = (SortService)beanFactory.getBean("sortService");
  List<SortBean> sortList = new ArrayList<SortBean>();
  service.getSortList(sortList, 0L, 0); //起始根节点id为0,等级为0
  for(SortBean bean: sortList){
   String str = "";
   for(int i=0;i<bean.getLevel();i++){
str +="——";
   }
   System.out.println(str+bean.getSortId() + " " + bean.getParentId() + " " + bean.getSortName());
  }
 }
 

 
查询结果:
1000 0 A类
 |——1001 1000 A类_1
|——1003 1001 A类_1_1
 |——1002 1000 A类_1
 |——2003 1002 A类_1_1
|——2004 2003 A类_1_1_1
2000 0 B类
 |——2001 2000 B类_1
 |——2002 2001 B类_1_1

代码:
 

复制代码 代码示例:
/**
 * 删除部门删除时从选中级的所有子级
 *
 * @param dept
 * @return
 */
public JsonResult delDept(Dept dept) {
JsonResult jr = new JsonResult();
Boolean flags=true;
try {
String str = "";
User user=new User();
List<Dept> sortList = new ArrayList<Dept>();
sortList.add(dept);
  getDeptSortList(sortList,dept.getId()); //起始根节点id,等级为0
  for(Dept bean: sortList){
 user.setDeptId(bean.getId()); //判断部门下面是否有用户
List<User> users =userDao.getByDeptIdIsUerOrNO(user);
 int userSize=users.size();
 if(userSize>0){
   jr.setMessage("部门名称:(" + users.get(0).getDeptName() + ")已有用户不能删除");
   flags=false;
   break;
 }
   }
 //部门没有被用户使用时才可以册子
 if(flags){
 for(Dept bean: sortList){
  dept.setId(bean.getId());
  deptDao.delDept(dept);
 jr.setMessage(SuccessMessageEnum.detele.toDescription());
 }
 }
  jr.setSuccess(true);
} catch (Exception e) {
log.error("DeptServiceImpl-->delDept:" + e.getMessage());
jr.setCode(ExceptionEnum.SystemError.toCode());
jr.setMessage(e.getMessage());
}
return jr;

 /**
 * 删除时递归部门树
 *
 * @param
 * @return
 */
   public void getDeptSortList(List<Dept> sortDeptList,Integer parentId)throws Exception {
   Dept bean = null;
 //根据选中的部门id得到本部门和第一级所有的子部门的id
   List<Dept> deptslist=deptDao.getByDeptIdAllSubDeptId(parentId);  //;//每次查询出上级为的分类
   // int  deptSize=deptslist.size();
if(deptslist.size() > 0){
for(int i=0;i<deptslist.size();i++){
bean = (Dept)deptslist.get(i);
 sortDeptList.add(bean);
 getDeptSortList(sortDeptList,bean.getId()); //递归查询
}
}
}
 

mysql递归查询实例解析
mysql递归查询(分页版)代码
mysql递归查询替代函数实例
mysql递归查询树形叶子
MySQL 递归查询当前节点子节点
mysql递归查询实现方法
MySQL存储过程递归调用实例