我们在网站里面可以看到左侧有菜单,有父列表,每一个下面还有子列表

但是以上的菜单是自己写在jsp页面的,写在想要动态的显示,就是菜单的父子都在数据库,要动态的展现在前段

数据库里面的数据

insert  into categorys values('1000','图书','好书。。。。',null);
insert  into categorys values('1001','小说','好书。。。。','1000');
insert  into categorys values('1002','计算机图书','好书。。。。','1000');

insert  into categorys values('2000','电子产品','好电子产品。。。。',null);
insert  into categorys values('2001','手机','电子产品。。。。','2000');
insert  into categorys values('2002','电话','电子产品。。。。','2000');

insert  into categorys values('3000','衣服','衣服。。。。',null);
insert  into categorys values('3001','上衣','衣服。。。。','3000');
insert  into categorys values('3002','女裤','衣服。。。。','3000');

select * from categorys;

select * from categorys where cid is null;

-- 查询所有的类别和子类别

select c1.cid ,c1.name ,c1.desc,c2.id as cid, c2.name cname ,c2.desc cdesc
from (select * from categorys where cid is null) c1 left join categorys c2 on c1.id=c2.cid;

项目里面要定义一个这个菜单的实体,


/** * 并不是实体,只是为了给展示类别的tree使用 * @author * @date 2020/9/7--10:23 */
public class CategoryDTO {
   

    private String id;
    private String name;
    private String desc;
// 子类别
    private List<CategoryDTO> categorys;

    public CategoryDTO() {
   
    }

    public CategoryDTO(String id, String name, String desc, List<CategoryDTO> categorys) {
   
        this.id = id;
        this.name = name;
        this.desc = desc;
        this.categorys = categorys;
    }

    public String getId() {
   
        return id;
    }

    public void setId(String id) {
   
        this.id = id;
    }

    public String getName() {
   
        return name;
    }

    public void setName(String name) {
   
        this.name = name;
    }

    public String getDesc() {
   
        return desc;
    }

    public void setDesc(String desc) {
   
        this.desc = desc;
    }

    public List<CategoryDTO> getCategorys() {
   
        return categorys;
    }

    public void setCategorys(List<CategoryDTO> categorys) {
   
        this.categorys = categorys;
    }

    @Override
    public boolean equals(Object o) {
   
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        CategoryDTO that = (CategoryDTO) o;
        return Objects.equals(id, that.id) &&
                Objects.equals(name, that.name) &&
                Objects.equals(desc, that.desc) &&
                Objects.equals(categorys, that.categorys);
    }

    @Override
    public int hashCode() {
   
        return Objects.hash(id, name, desc, categorys);
    }

    @Override
    public String toString() {
   
        return "CategoryDTO{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", desc='" + desc + '\'' +
                ", categorys=" + categorys +
                '}';
    }
}