【日常记录】遍历菜单信息--后端

本文介绍了一种基于Java的菜单系统设计方案,通过TreeNode类封装树形视图,并使用Menu类来记录菜单信息。文章详细解释了如何从数据库中获取菜单数据,并将其转化为前端所需的树形结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TreeNode (树对象)

用于页面treeview

   package com.changan.cvserver.entity;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * 
 * ClassName: TreeNode <br/>
 * Function: treeView类封装. <br/>
 * Reason: TODO ADD REASON(可选). <br/>
 * date: 2017年12月5日 上午10:42:40 <br/>
 *
 * @author yangjing
 * @version 
 * @since JDK 1.7
 */

public class TreeNode implements Serializable{
	
	private static final long serialVersionUID = -202254381099838216L;
	private String id;
	private String text;
	private String icon;
	private String href;
	private String selectable;
	private String backColor;
	private Map<String,Object> state;
	private String[] tags;
	private List<TreeNode> nodes;
	/**
	 * @return  id
	 */
	public String getId() {
		return id;
	}
	/**
	 * @param id the id to set
	 */
	public void setId(String id) {
		this.id = id;
	}
	/**
	 * @return  text
	 */
	public String getText() {
		return text;
	}
	/**
	 * @param text the text to set
	 */
	public void setText(String text) {
		this.text = text;
	}
	/**
	 * @return  icon
	 */
	public String getIcon() {
		return icon;
	}
	/**
	 * @param icon the icon to set
	 */
	public void setIcon(String icon) {
		this.icon = icon;
	}
	/**
	 * @return  href
	 */
	public String getHref() {
		return href;
	}
	/**
	 * @param href the href to set
	 */
	public void setHref(String href) {
		this.href = href;
	}
	/**
	 * @return  selectable
	 */
	public String getSelectable() {
		return selectable;
	}
	/**
	 * @param selectable the selectable to set
	 */
	public void setSelectable(String selectable) {
		this.selectable = selectable;
	}
	/**
	 * @return  state
	 */
	public Map<String, Object> getState() {
		return state;
	}
	/**
	 * @param state the state to set
	 */
	public void setState(Map<String, Object> state) {
		this.state = state;
	}
	/**
	 * @return  tags
	 */
	public String[] getTags() {
		return tags;
	}
	/**
	 * @param tags the tags to set
	 */
	public void setTags(String[] tags) {
		this.tags = tags;
	}
	/**
	 * @return  nodes
	 */
	public List<TreeNode> getNodes() {
		return nodes;
	}
	/**
	 * @param nodes the nodes to set
	 */
	public void setNodes(List<TreeNode> nodes) {
		this.nodes = nodes;
	}
	/**
	 * backColor.
	 *
	 * @return  the backColor
	 * @since   JDK 1.7
	 */
	public String getBackColor() {
		return backColor;
	}
	/**
	 * backColor.
	 *
	 * @param   backColor    the backColor to set
	 * @since   JDK 1.7
	 */
	public void setBackColor(String backColor) {
		this.backColor = backColor;
	}
}

菜单实体类

用于记录菜单信息

package com.changan.cvserver.entity;

import java.util.Date;
import java.util.List;

import com.changan.anywhere.persistence.entity.IdEntity;
/**
 * 
 * ClassName: Menu <br/>
 * Function: 菜单实体. <br/>
 * Reason: TODO ADD REASON(可选). <br/>
 * date: 2017年12月4日 下午3:37:46 <br/>
 *
 * @author yangjing
 * @version 
 * @since JDK 1.7
 */
public class Menu extends IdEntity {
	
	/**
	 * 状态:0启用
	 */
	public static final String STATUS_0 = "0";
	/**
	 * 状态:1禁用
	 */
	public static final String STATUS_1 = "1";
    /**
     * 
     */
    private static final long serialVersionUID = 3787988532621657485L;
    /**
     * 菜单名称
     */
    private String name;
    /**
     * 父id
     */
    private String parentId; 
    /**
     * 创建时间
     */
    private Date createTime; 
    /**
     * 创建人id
     */
    private String createUserId; 
    /**
     * 图标
     */
    private String icon;
    /**
     * 排序
     */
    private int sqm; 
    /**
     * 状态(0:启用 1:禁用)
     */
    private String status; 
    /**
     * 备注
     */
    private String remark;
    /**
     * url
     */
    private String url;
    /**
     * 查询条件扩展字段  开始时间
     */
    private String beginTime;
    /**
     * 查询条件扩展字段  结束时间
     */
    private String endTime;
    /**
     * 查询条件  当前登录人对应的菜单id集合
     */
    private List<String> haveMenuIDList;
    
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getParentId() {
		return parentId;
	}
	public void setParentId(String parentId) {
		this.parentId = parentId;
	}
	public Date getCreateTime() {
		return createTime;
	}
	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}
	public String getCreateUserId() {
		return createUserId;
	}
	public void setCreateUserId(String createUserId) {
		this.createUserId = createUserId;
	}
	public String getIcon() {
		return icon;
	}
	public void setIcon(String icon) {
		this.icon = icon;
	}
	public int getSqm() {
		return sqm;
	}
	public void setSqm(int sqm) {
		this.sqm = sqm;
	}
	public String getStatus() {
		return status;
	}
	public void setStatus(String status) {
		this.status = status;
	}
	public String getRemark() {
		return remark;
	}
	public void setRemark(String remark) {
		this.remark = remark;
	}
	public String getUrl() {
		return url;
	}
	public void setUrl(String url) {
		this.url = url;
	}
	public String getBeginTime() {
		return beginTime;
	}
	public void setBeginTime(String beginTime) {
		this.beginTime = beginTime;
	}
	public String getEndTime() {
		return endTime;
	}
	public void setEndTime(String endTime) {
		this.endTime = endTime;
	}
	public List<String> getHaveMenuIDList() {
		return haveMenuIDList;
	}
	public void setHaveMenuIDList(List<String> haveMenuIDList) {
		this.haveMenuIDList = haveMenuIDList;
	} 
}

菜单表文件

Mysql数据库

/*DDL 信息*/------------

CREATE TABLE `menu` (
  `id` varchar(36) NOT NULL COMMENT 'id',
  `name` varchar(200) NOT NULL COMMENT '菜单名称',
  `parent_id` varchar(36) DEFAULT NULL COMMENT '父id',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `create_user_id` varchar(36) DEFAULT NULL COMMENT '创建人id',
  `icon` varchar(50) DEFAULT NULL COMMENT '图标',
  `status` int(2) NOT NULL DEFAULT '0' COMMENT '状态(0:启用 1:禁用)',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  `url` varchar(500) DEFAULT NULL COMMENT '访问后端url',
  `sqm` int(10) DEFAULT NULL COMMENT '排序',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统菜单表'

后端叠菜单信息(处理TreeNode)

组装TreeNode信息,由于框架的原因,TreeNodeDTO和TreeNode是一样的;只是用于转换

  • 获取所有菜单信息
@Override
	public List<TreeNodeDTO> getAllMenu() {
		//第一步获取所有的更节点菜单
		List<Menu> rootMenus = getRootMenu(new Menu());
		List<Menu> menuData = getMenus(new Menu());
		if (rootMenus != null && rootMenus.size() > 0) {
			List<TreeNode> treeNodes = new ArrayList<TreeNode>();
			for (Menu menu : rootMenus) {
				TreeNode treeNode = convert(menu);
				parseMenu(menuData, treeNode);
				treeNodes.add(treeNode);
			}
			return (List<TreeNodeDTO>) BeanMapper.mapList(treeNodes, TreeNodeDTO.class);
		}
		return null;
	}
  • getRootMenu:获取所有根节点信息(父节点为空)
/**
	 * 
	 * getRootMenu:获取所有根节点信息. <br/>
	
	 *
	 * @author yangjing
	 * @param menu 
	 * @return
	 * @since JDK 1.7
	 */
	private List<Menu> getRootMenu(Menu menu) {
		return menuDao.getRootMenu(menu);
	}
  • getMenus:获取所有菜单信息
/**
     * 
     * getMenus:获取所有菜单信息. <br/>
    
     *
     * @author yangjing
     * @return
     * @since JDK 1.7
     */
	public List<Menu> getMenus(Menu menu) {
		return menuDao.getMenuInfos(menu);
	}
  • parseMenu:组装菜单,及组装TreeNode信息
/**
     * 
     * parseMenu:组装菜单. <br/>
    
     *
     * @author yangjing
     * @param menuData
     * @param treeNode
     * @since JDK 1.7
     */
	public void parseMenu(List<Menu> menuData, TreeNode treeNode) {
		List<Menu> rcms = getChildren(treeNode.getId(), menuData);
		if (rcms != null && rcms.size() > 0) {
			List<TreeNode> rootTreeNode = new ArrayList<TreeNode>();
			for (Menu menu : rcms) {
				List<Menu> cms = getChildren(menu.getId(), menuData);
				TreeNode ctn = convert(menu);
				rootTreeNode.add(ctn);
				if (cms != null && cms.size() > 0) {
					parseMenu(menuData, ctn);
				}
			}
			treeNode.setNodes(rootTreeNode);
		}

	}
  • getChildren: 获取子菜单信息
/**
	 * 
	 * getChildren:获取子菜单信息. <br/>
	
	 *
	 * @author yangjing
	 * @param menuid
	 * @param menus
	 * @return
	 * @since JDK 1.7
	 */
	public List<Menu> getChildren(String menuid, List<Menu> menus) {
		List<Menu> menuList = new ArrayList<Menu>();
		for (Menu menu : menus) {
			if (menuid.equals(menu.getParentId()) ) {
				menuList.add(menu);
			}
		}
		return menuList;
	}
  • 组装TreeNode对象信息
public TreeNode convert(Menu menu) {
		TreeNode treeNode = new TreeNode();
		treeNode.setId(menu.getId());
		treeNode.setText(menu.getName());
		treeNode.setIcon(menu.getIcon());
		treeNode.setHref(menu.getUrl());
		treeNode.setSelectable("true");
		treeNode.setTags(new String[]{menu.getId()+"",menu.getStatus()+""});
		Map<String, Object> state = new HashMap<String,Object>();
		state.put("disabled",false);
		state.put("expanded", false);
		state.put("selected", false);
		treeNode.setState(state);
		return treeNode;
	}

转载于:https://my.oschina.net/cqyj/blog/1586192

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值