功能描述
- 实际上级联菜单可能在很多情况下出现,例如:在设置地址的时候后,由用户先设置省份,而后再根据省份生出对应的城市信息.
- 实现无限极力按菜单选择
- 例如有用户自己设置要生成几级菜单
数据库设计
DROP TABLE IF EXISTS menu;
CREATE TABLE menu(
mid INT AUTO_INCREMENT,
title VARCHAR(200),
fmid INT,
CONSTRAINT pk_mid2 PRIMARY KEY(mid),
CONSTRAINT fk_fmid FOREIGN KEY(fmid) REFERENCES menu(mid) ON DELETE CASCADE
);
INSERT INTO menu(title)VALUES('家居生活');
INSERT INTO menu(title)VALUES('电脑办公');
INSERT INTO menu(title)VALUES('粮油');
INSERT INTO menu(title)VALUES('图书');
INSERT INTO menu(title)VALUES('箱包服饰');
INSERT INTO menu(title,fmid)VALUES('锅',1);
INSERT INTO menu(title,fmid)VALUES('碗',1);
INSERT INTO menu(title,fmid)VALUES('瓢',1);
INSERT INTO menu(title,fmid)VALUES('拖布',1);
INSERT INTO menu(title,fmid)VALUES('游戏周边',2);
INSERT INTO menu(title,fmid)VALUES('整机',2);
INSERT INTO menu(title,fmid)VALUES('数码配件',2);
INSERT INTO menu(title,fmid)VALUES('粮油',3);
INSERT INTO menu(title,fmid)VALUES('零食',3);
INSERT INTO menu(title,fmid)VALUES('啤酒饮料',3);
INSERT INTO menu(title,fmid)VALUES('计算机图书',4);
INSERT INTO menu(title,fmid)VALUES('Java入门到跑路',4);
INSERT INTO menu(title,fmid)VALUES('影视',4);
INSERT INTO menu(title,fmid)VALUES('旅行包',5);
INSERT INTO menu(title,fmid)VALUES('棉衣',5);
INSERT INTO menu(title,fmid)VALUES('睡衣',5);
INSERT INTO menu(title,fmid)VALUES('雨衣',5);
INSERT INTO menu(title,fmid) VALUES('不粘锅',6);
INSERT INTO menu(title,fmid) VALUES('平底锅',6);
INSERT INTO menu(title,fmid) VALUES('砂锅',6);
INSERT INTO menu(title,fmid) VALUES('刷锅',6);
INSERT INTO menu(title,fmid) VALUES('不锈钢',7);
INSERT INTO menu(title,fmid) VALUES('银碗',7);
INSERT INTO menu(title,fmid) VALUES('汤勺',8);
INSERT INTO menu(title,fmid) VALUES('木勺',8);
INSERT INTO menu(title,fmid) VALUES('普通拖把',9);
INSERT INTO menu(title,fmid) VALUES('选装拖把',9);
INSERT INTO menu(title,fmid) VALUES('游戏',10);
- 无线级别的菜单的处理,关键体现在这个父的菜单项上,但是虽然数据库是无限的,但是绝不可能在程序中实现无限.
- 在这种情况下要想实现信息的操作,唯一的用法只能够通过过Ajax异步处理操作完成.
后台业务实现
package mao.shu.vo;
import java.io.Serializable;
public class Menu implements Serializable {
private String mid;
private String title;
private Menu fmenu;
public String getMid() {
return mid;
}
public void setMid(String mid) {
this.mid = mid;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Menu getFmenu() {
return fmenu;
}
public void setFmenu(Menu fmenu) {
this.fmenu = fmenu;
}
}
package mao.shu.dao;
import mao.shu.vo.Menu;
import java.util.List;
public interface IMenuDAO {
public List<Menu> findAll();
public List<Menu> findAllSub(String fmid);
}
package mao.shu.dao.imple;
import mao.shu.dao.IMenuDAO;
import mao.shu.vo.Menu;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class MenuDAOImpl implements IMenuDAO {
private Connection conn;
private PreparedStatement pstm;
public MenuDAOImpl(Connection conn){
this.conn = conn;
}
@Override
public List<Menu> findAll()throws SQLException {
List<Menu> menus = new ArrayList<Menu>();
String sql = "SELECT mid,title FROM menu WHILE fmid IS NOLL";
this.pstm = this.conn.prepareStatement(sql);
ResultSet rest = this.pstm.executeQuery();