在项目中实际测的多级遍历查询
ConsultationZjPojo
package com.my.ssdc.domain;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.stereotype.Component;
import java.io.Serializable;
import java.util.Date;
@Component
@AllArgsConstructor
@NoArgsConstructor
@Data
@Accessors(chain = true)
@ApiModel(description = "ConsultationZjPojo")
//咨询列表的实现类
public class ConsultationZjPojo implements Serializable {
//咨询列表接口
private String txtId;
private String parentId;
}
seervice层的接口
package com.my.ssdc.service;
import com.my.ssdc.domain.SysResult;
/**
* @description: $
* @return: $
* @author: Andy
* @time: $ $
*/
public interface PriceService {
SysResult findChildlist(String id);
}
service实现类
package com.my.ssdc.service.impl;
import com.my.ssdc.domain.CatalogPojo;
import com.my.ssdc.domain.ConsultationZjPojo;
import com.my.ssdc.domain.SysResult;
import com.my.ssdc.repository.ConsultationDao;
import com.my.ssdc.service.PriceService;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* @description: $
* @return: $
* @author: Andy
* @time: $ $
*/
@Service
public class PriceServiceImpl implements PriceService {
@Autowired
private ConsultationDao consultationDao;
public void addChildrenIds(List<ConsultationZjPojo> resList, String id, List<String> childrenIdList) {
//此方法说明使用for循环进行遍历,如果循环条件一直存在,则一直存进去,如果循环条件不存在,则推出循环
for (ConsultationZjPojo consultationPojo : resList) {
if(consultationPojo.getParentId().equals(id)){ //如果父级id等于id
childrenIdList.add(consultationPojo.getTxtId());//文章id添加到子级id的集合中
addChildrenIds(resList,consultationPojo.getTxtId(),childrenIdList);
}
}
}
//如果直接调用某一个方法就要获取这个方法的最后返回的数据,例如这个方法,如果直接调用这个方法,那么就可以获取这个方法的childrenList值
private List<String> allZj(String id){
List<String> childrenList = new ArrayList<>();
//从数据库中查询栏目id和栏目父级id
List<ConsultationZjPojo> allZj1 = consultationDao.findAllZj();
addChildrenIds(allZj1,id,childrenList);//直接调用
return childrenList;
}
@Override
public SysResult findChildlist(String id) {
List<CatalogPojo> childCatalog = new ArrayList<>();
List<String> strings = allZj(id);
//如果查询出来的栏目id和栏目父级id不为null,则查询数据库的栏目id,栏目父级id,栏目名称;
if(CollectionUtils.isNotEmpty(strings)){
childCatalog = consultationDao.findChildCatalog(strings);
}
return SysResult.success(childCatalog);
}
}
controller层的代码
package com.my.ssdc.web;
import com.my.ssdc.domain.SysResult;
import com.my.ssdc.service.impl.PriceServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @description: $
* @return: $
* @author: Andy
* @time: $ $
*/
@Api(value = "/api",tags = {"price-controller"})
@RestController
@RequestMapping("/api")
public class PriceContoller {
@Autowired
private PriceServiceImpl userService;
@ApiOperation(value = "GET /测试查找类别子集 ",
notes = "GET /findChildlist ",httpMethod = "GET")
@GetMapping("/findChildlist")
public SysResult findChildlist(String id) {
SysResult all = userService.findChildlist(id);
return all;
}
}
dao层sql
//查询栏目id和栏目父级id
@Select({"SELECT a.ID as txtId,a.ParentID as parentId FROM ZCCatalog a "})
List<ConsultationZjPojo> findAllZj();
//此方法为查找栏目的id,名称,栏目的父级id
@Select({
"<script>",
"SELECT a.ID,a.Name,a.ParentID FROM ZCCatalog a WHERE a.ID in ",
"<foreach collection='id' item='item' open='(' separator=',' close=')'>",
"#{item}",
"</foreach>",
"</script>"
})
List<CatalogPojo> findChildCatalog(@Param("id") List<String> id);