前言
其实很久之前就很想写这篇博客,但是由于我的记性差和项目的原因,总是没有写,今天忽然想起来,要是今天不写或许过几天就忘了,于是敲起键盘,写这篇博客。
数据库设计
对于一个项目来说,数据库的设计是一个至关重要的事情,如果数据库设计的不好,
那么往往会让项目变得更加复杂。
category中基本有4个属性
id:分类的唯一标识符
name:分类名
count:当前分类有多少子分类
parent_id:当前分类的父类id
为什么会这样分类呢?我们的商品类别有很多,并且商品分类是分级的,每一级下面又有很多子分类,子分类下面又有子分类,如下图:
通过观察可以发现,它的每一级都是有关联的,所以我们可以通过一个parent_id来让分类相关联,每个分类都有一个父类,parent_id记录了它的父类的id,当在最上层的时候他的父类为0。每一个分类都会有一个count来记录它的有多少子类,在实际用到的时候我们就可以通过count来判断当前分类有多少子类。
实际用例
当我们想要得到我们的电脑下面的所有的商品时
List<Long> resultList = new ArrayList<Long>();
Category category = categoryDao.findOne(id);//id为当前选择的电脑id
if (category.getCount() != 0) { //获取当前是否有子分类
List<Category> list = categoryDao.findCategoryChild(category.getId());//寻找当前category的子分类
while (flag) { //遍历当前list,找到叶子分类
List<Category> tempList = new ArrayList<>();
tempList.addAll(list);
for (Category myid : tempList) {
list.remove(myid);
if (myid.getCount() == 0) {
resultList.add(myid.getId());
} else {
List<Category> childList = categoryDao.findCategoryChild(myid.getId());
list.addAll(childList);
}
}
if (list.size() == 0)
flag = false;
}
} else {
resultList.add(id);
}
通过这一系列的操作,就可以获得我们某个分类下的叶子分类。
当我们上传商品时我们可以选择我们的商品类别
就像这样,我们每次选择分类的时候都会自动的生成他的下一级菜单,代码如下:
html:
<div id="my_select" style="float: left;margin-left: 14.5%;">
<select id="select_first">
</select>
</div>
js:
var category;//分类信息
var mydiv;
$(function () {
mydiv = $('#my_select');
$('#my_select').on('change', "select", function (