第一次写博客,权当做笔记,自己也在学习java。有不对的,欢迎指正。
1.首先是mysql的菜单表,我命名为: sys_menu(在此需要注意,一般数据库的命名和字段类型都采用小写)
2.以下是详细的数据库建表: /* Navicat MySQL Data Transfer
Source Server : ************** Source Server Version : 50721 Source Host : 10.18.3.200:13306 Source Database : iotcard
Target Server Type : MYSQL Target Server Version : 50721 File Encoding : 65001
Date: 2018-07-09 09:20:35 */
SET FOREIGN_KEY_CHECKS=0;
-- Table structure for sys_menu
DROP TABLE IF EXISTS sys_menu
; CREATE TABLE sys_menu
( id
bigint(11) NOT NULL, parentid
bigint(11) NOT NULL COMMENT '父节点id', resourcetype
varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '资源文件类型', resouceid
bigint(20) NOT NULL COMMENT '前端用的数据', resourcename
varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '资源文件名称', resourcedesc
varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '资源文件排序', resourceurl
varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '资源文件路径', resourceicon
varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '资源文件图标', sortnum
bigint(11) DEFAULT NULL, regrant
varchar(255) COLLATE utf8_bin DEFAULT NULL, create_time
datetime DEFAULT NULL, create_by
varchar(32) COLLATE utf8_bin DEFAULT NULL, update_time
datetime DEFAULT NULL, update_by
varchar(32) COLLATE utf8_bin DEFAULT NULL, PRIMARY KEY (id
) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
-- Records of sys_menu
INSERT INTO sys_menu
VALUES ('1', '0', '/view/sugargroup/console', '1', '前端工程脚手架', null, null, null, null, null, null, null, null, null); INSERT INTO sys_menu
VALUES ('2', '1', '1', '1000', '账户总览', null, './index.html#/accountOverview/accountOverview', 'Home', '2110', '1', null, null, null, null); INSERT INTO sys_menu
VALUES ('3', '1', '1', '1100', '号码管理', '原账户', './index.html#/common/building', 'People', '3110', '1', null, null, null, null); INSERT INTO sys_menu
VALUES ('4', '3', '1', '1101', '号码申请', null, './index.html#/phoneManage/phoneApply ', null, '3111', '1', null, null, null, null); INSERT INTO sys_menu
VALUES ('5', '3', '1', '1102', '号码操作', null, './index.html#/phoneManage/phoneHandle', '', '3112', '0', null, null, null, null); INSERT INTO sys_menu
VALUES ('6', '3', '1', '1103', '号码查询', '', './index.html#/phoneManage/phoneQuery', '', '3113', '0', '2018-06-25 14:04:29', 'hsy', '2018-06-25 14:04:42', 'hsy'); INSERT INTO sys_menu
VALUES ('7', '1', '1', '1200', '用户数据', '原账户', './index.html#/common/building', 'People', '4110', '1', null, null, null, null); INSERT INTO sys_menu
VALUES ('8', '7', '1', '1201', '用户量', null, './index.html#/userData/userVolume', null, '4111', '1', null, null, null, null); INSERT INTO sys_menu
VALUES ('9', '1', '1', '1300', '流量使用情况', '原账户', './index.html#/flowUsage/flowUsage', 'People', '5110', '1', null, null, null, null); INSERT INTO sys_menu
VALUES ('10', '1', '1', '1400', '用户设置', '原账户', './index.html#/common/building', 'People', '6110', '1', null, null, null, null); INSERT INTO sys_menu
VALUES ('11', '10', '1', '1401', '上传企业信息', null, './index.html#/userSetting/enterpriseInfoAdd', null, '6111', '1', null, null, null, null); INSERT INTO sys_menu
VALUES ('12', '10', '1', '1402', '查看企业信息', null, './index.html#/userSetting/enterpriseInfoView', null, '6112', '1', null, null, null, null); INSERT INTO sys_menu
VALUES ('13', '10', '1', '1403', '密码设置', null, './index.html#/userSetting/passwordSetting', null, '6113', '0', null, null, null, null); INSERT INTO sys_menu
VALUES ('15', '1', '1', '1500', '数据文件上传', '原账户', './index.html#/uploadData/uploadData', 'People', '7110', '1', null, null, null, null); INSERT INTO sys_menu
VALUES ('16', '1', '1', '1600', '消息中心', null, './index.html#/messageCenter/messageCenter', null, null, null, null, null, null, null);
3.然后mybatis反向生成dao,entity(bean,model),和mapper文件。
bean(model,entity)层
SysMenu.class(主要是对应数据库里的字段) public class SysMenu implements Serializable { private static final long serialVersionUID = 1L;
private Long id;
private Long parentid;
private String resourcetype;
private Long resouceid;
private String resourcename;
private String resourcedesc;
private String resourceurl;
private String resourceicon;
private Long sortnum;
private String regrant;
private Date createTime;
private String createBy;
private Date updateTime;
private String updateBy;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getParentid() {
return parentid;
}
public void setParentid(Long parentid) {
this.parentid = parentid;
}
public String getResourcetype() {
return resourcetype;
}
public void setResourcetype(String resourcetype) {
this.resourcetype = resourcetype == null ? null : resourcetype.trim();
}
public Long getResouceid() {
return resouceid;
}
public void setResouceid(Long resouceid) {
this.resouceid = resouceid;
}
public String getResourcename() {
return resourcename;
}
public void setResourcename(String resourcename) {
this.resourcename = resourcename == null ? null : resourcename.trim();
}
public String getResourcedesc() {
return resourcedesc;
}
public void setResourcedesc(String resourcedesc) {
this.resourcedesc = resourcedesc == null ? null : resourcedesc.trim();
}
public String getResourceurl() {
return resourceurl;
}
public void setResourceurl(String resourceurl) {
this.resourceurl = resourceurl == null ? null : resourceurl.trim();
}
public String getResourceicon() {
return resourceicon;
}
public void setResourceicon(String resourceicon) {
this.resourceicon = resourceicon == null ? null : resourceicon.trim();
}
public Long getSortnum() {
return sortnum;
}
public void setSortnum(Long sortnum) {
this.sortnum = sortnum;
}
public String getRegrant() {
return regrant;
}
public void setRegrant(String regrant) {
this.regrant = regrant == null ? null : regrant.trim();
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public String getCreateBy() {
return createBy;
}
public void setCreateBy(String createBy) {
this.createBy = createBy == null ? null : createBy.trim();
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
public String getUpdateBy() {
return updateBy;
}
public void setUpdateBy(String updateBy) {
this.updateBy = updateBy == null ? null : updateBy.trim();
}
复制代码
}
bean(model,entity)层 SysMenuTree.class(生成前台菜单树的结构类型) public class SysMenuTree extends SysMenu implements Serializable {
private List<SysMenuTree> children;
public List<SysMenuTree> getChildren() {
return children;
}
public void setChildren(List<SysMenuTree> children) {
this.children = children;
}
复制代码
}
dao层 SysMenuMapper.class public interface SysMenuMapper { List selectAllSysMenu(); }
service层: public interface SysMenuService { List selectAllSysMenu(); }
service实现层:
serviceImpl @Service @Transactional(rollbackFor = Exception.class) public class SysMenuServiceImpl implements SysMenuService {
@Resource
SysMenuMapper sysMenuMapper;
@Override
public List<sysMenu> selectAllSysMenu() {
// TODO Auto-generated method stub
return sysMenuMapper.selectAllSysMenu();
}
复制代码
}
然后是util包,再此主要是完成递归生成菜单树的代码。 MenuTreeUtil.class /**
-
@author huangshiyou
-
@Description:生成前台树结构的json
-
@Date: Created in 2018/6/26 12:37
-
@Modified By: */ public class MenuTreeUtil { //oreginSysMenu 树菜单原始数据 public static Map getMenuTree(List oreginSysMenu) throws Exception{ //最后结果 Map RsTreeMenu = new HashMap(); SysMenuTree sysMenuTree = new SysMenuTree(); //先找到所有的一级菜单,一级菜单的Parentid=0 for (SysMenu sysMenu: oreginSysMenu) { if(sysMenu.getParentid() == 0){ sysMenuTree = copyCMenuToMenuTree(sysMenu); } } //为一级菜单设置子菜单,getChild是递归调用的 sysMenuTree.setChildren(getChild(sysMenuTree.getId(),oreginSysMenu)); RsTreeMenu.put("root",sysMenuTree); return RsTreeMenu; }
private static List getChild(Long id, List oreginSysMenu) { List childList = new ArrayList<>(); if(booleanHasChildMenu(id,oreginSysMenu)){ for (SysMenu sysMenu: oreginSysMenu) { ///获取所有的二级菜单 if(sysMenu.getParentid().equals(id)){ SysMenuTree sysMenuTree = copyCMenuToMenuTree(sysMenu); if(booleanHasChildMenu(sysMenuTree.getId(),oreginSysMenu)){ List child = getChild(sysMenu.getId(), oreginSysMenu); sysMenuTree.setChildren(child); }else{ ArrayList arrayList = new ArrayList(); sysMenuTree.setChildren(arrayList); } childList.add(sysMenuTree); } } } return childList; } //判断是否还有子菜单 public static boolean booleanHasChildMenu(Long pid, List oreginSysMenu){ boolean flag = false; breakRs: for (SysMenu sysMenu: oreginSysMenu) { if(pid.equals(sysMenu.getParentid())){ flag = true; break breakRs; } } return flag; } //包装 public static SysMenuTree copyCMenuToMenuTree(SysMenu sysMenu){ SysMenuTree rootSysMenuTree = new SysMenuTree(); rootSysMenuTree.setId(sysMenu.getId()); rootSysMenuTree.setResouceid(sysMenu.getResouceid()); rootSysMenuTree.setParentid(sysMenu.getParentid()); rootSysMenuTree.setResourceicon(sysMenu.getResourceicon()); rootSysMenuTree.setRegrant(sysMenu.getRegrant()); rootSysMenuTree.setResourcedesc(sysMenu.getResourcedesc()); rootSysMenuTree.setResourcename(sysMenu.getResourcename()); rootSysMenuTree.setResourcetype(sysMenu.getResourcetype()); rootSysMenuTree.setResourceurl(sysMenu.getResourceurl()); rootSysMenuTree.setSortnum(sysMenu.getSortnum()); return rootSysMenuTree; } }
controller层调用 **
-
@author huangshiyou
-
@Description:导航页菜单获取
-
@Date: Created in 2018/6/25 11:27
-
@Modified By: */ @Controller public class SysMenuController { Logger logger = LoggerFactory.getLogger(this.class);
@Autowired SysMenuService sysMenuService;
@RequestMapping(value = "/sysMenu/menuList", method = RequestMethod.GET) @ResponseBody public String getMenuList() throws Exception { return MenuTreeUtil.getMenuTree(sysMenuService.selectAllSysMenu); } }
----------------------------------------得到的返回json格式的字符串为: { "root": { "children": [{ "children": [], "id": "2", "parentid": "1", "regrant": "1", "resouceid": "1000", "resourceicon": "Home", "resourcename": "账户总览", "resourcetype": "1", "resourceurl": "./index.html#/accountOverview/accountOverview", "sortnum": "2110" }, { "children": [{ "children": [], "id": "4", "parentid": "3", "regrant": "1", "resouceid": "1101", "resourcename": "号码申请", "resourcetype": "1", "resourceurl": "./index.html#/phoneManage/phoneApply", "sortnum": "3111" }, { "children": [], "id": "5", "parentid": "3", "regrant": "0", "resouceid": "1102", "resourceicon": "", "resourcename": "号码操作", "resourcetype": "1", "resourceurl": "./index.html#/phoneManage/phoneHandle", "sortnum": "3112" }, { "children": [], "id": "6", "parentid": "3", "regrant": "0", "resouceid": "1103", "resourcedesc": "", "resourceicon": "", "resourcename": "号码查询", "resourcetype": "1", "resourceurl": "./index.html#/phoneManage/phoneQuery", "sortnum": "3113" } ], "id": "3", "parentid": "1", "regrant": "1", "resouceid": "1100", "resourcedesc": "原账户", "resourceicon": "People", "resourcename": "号码管理", "resourcetype": "1", "resourceurl": "./index.html#/common/building", "sortnum": "3110" }, { "children": [{ "children": [], "id": "8", "parentid": "7", "regrant": "1", "resouceid": "1201", "resourcename": "用户量", "resourcetype": "1", "resourceurl": "./index.html#/userData/userVolume", "sortnum": "4111" }], "id": "7", "parentid": "1", "regrant": "1", "resouceid": "1200", "resourcedesc": "原账户", "resourceicon": "People", "resourcename": "用户数据", "resourcetype": "1", "resourceurl": "./index.html#/common/building", "sortnum": "4110" }, { "children": [], "id": "9", "parentid": "1", "regrant": "1", "resouceid": "1300", "resourcedesc": "原账户", "resourceicon": "People", "resourcename": "流量使用情况", "resourcetype": "1", "resourceurl": "./index.html#/flowUsage/flowUsage", "sortnum": "5110" }, { "children": [{ "children": [], "id": "11", "parentid": "10", "regrant": "1", "resouceid": "1401", "resourcename": "上传企业信息", "resourcetype": "1", "resourceurl": "./index.html#/userSetting/enterpriseInfoAdd", "sortnum": "6111" }, { "children": [], "id": "12", "parentid": "10", "regrant": "1", "resouceid": "1402", "resourcename": "查看企业信息", "resourcetype": "1", "resourceurl": "./index.html#/userSetting/enterpriseInfoView", "sortnum": "6112" }, { "children": [], "id": "13", "parentid": "10", "regrant": "0", "resouceid": "1403", "resourcename": "密码设置", "resourcetype": "1", "resourceurl": "./index.html#/userSetting/passwordSetting", "sortnum": "6113" } ], "id": "10", "parentid": "1", "regrant": "1", "resouceid": "1400", "resourcedesc": "原账户", "resourceicon": "People", "resourcename": "用户设置", "resourcetype": "1", "resourceurl": "./index.html#/common/building", "sortnum": "6110" }, { "children": [], "id": "15", "parentid": "1", "regrant": "1", "resouceid": "1500", "resourcedesc": "原账户", "resourceicon": "People", "resourcename": "数据文件上传", "resourcetype": "1", "resourceurl": "./index.html#/uploadData/uploadData", "sortnum": "7110" }, { "children": [], "id": "16", "parentid": "1", "resouceid": "1600", "resourcename": "消息中心", "resourcetype": "1", "resourceurl": "./index.html#/messageCenter/messageCenter" } ], "id": "1", "parentid": "0", "resouceid": "1", "resourcename": "前端工程脚手架", "resourcetype": "/view/sugargroup/console" } }
---------------------------------------完毕。
如有不对,欢迎骚扰。或者回复我,或者email我,shiyougue@163.com.复制代码