商品分类递归查询Tree结构展示
商品分类数据结构:
create table tb_category(
id int primary key auto_increment,
name varchar(50),
goods_num int,
is_show char(1),
is_menu char(1),
seq int,
parent_id int,
template_id int
);
parent_id 父ID,自关联。
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
/** * category实体类 * @author Administrator * */
@Table(name="tb_category")
public class Category implements Serializable{
@Id
private Integer id;//分类ID
private String name;//分类名称
private Integer goodsNum;//商品数量
private String isShow;//是否显示
private String isMenu;//是否导航
private Integer seq;//排序
private Integer parentId;//上级ID
private Integer templateId;//模板ID
//setXxx/getXxx
}
前后端约定数据格式:
[
{
name:"一级菜单",
menus:[
{
name:"二级菜单",
menus:[
{
name:"三级菜单"
},
.........
]
}
]
}
]
//这种数据格式集合里面嵌套Map.
1.先查询出符合条件(符合条件是is_show=1,表示展示)的数据 List<Category> categoryList
2.通过递归形式进行数据整理。
(1)用什么数据类型进行接收:List<Map>
(2)写一个方法使用递归来整理,传递参数为categoryList
和parentId=0
(3)遍历categoryList
得到每个category
中的id
(4)id
和parentId
进行比较,如果相等 放入Map,在放入”menus”的时候在调用这个方法,此时就是在递归了。
Mapp用的是通用Mapper/数据库使用的是Mysql
public List<Map> findCategoryTree() {
//先查询符合条件的所有分类
Example example=new Example(Category.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("isShow","1");//1为显示 ;0 不显示
//排序
example.setOrderByClause("seq");
List<Category> categories = categoryMapper.selectByExample(example);
//parentId = 0 第一次 传递参数 0 表示一级, 查看表中的数据。
return findByParentId(categories,0);
}
//数据整理 使用递归
private List<Map> findByParentId(List<Category> categoryList, Integer
parentId){
List<Map> mapList=new ArrayList<Map>();
for(Category category:categoryList){
if(category.getParentId().equals(parentId)){
Map map =new HashMap();
map.put("name",category.getName());
map.put("menus",findByParentId(categoryList,category.getId()));
mapList.add(map);
}
}
return mapList;
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/100765.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...