从后台数据生成菜单树(java)

第一次写博客,权当做笔记,自己也在学习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.复制代码
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值