当前位置 博文首页 > yuanting_的博客:JVAVA递归查询数据库,生成tree菜单

    yuanting_的博客:JVAVA递归查询数据库,生成tree菜单

    作者:[db:作者] 时间:2021-08-25 10:12

    serviceImpl.java(业务实现层代码)

    /**
    	 * 根据用户名username和系统systemName去查询菜单信息
    	 * @param username 用户名
    	 * @param systemName 系统名称
    	 * @param parentId 父id(第一次默认传null,表示第一次查的是第一级菜单)
    	 * @return
    	 */
    	@Override
    	public List<SysMenu> findMenusByUserName(String username,String systemName,Long parentId){
    
    		List<SysMenu> listMenus;
    		/*第一级*/
    		listMenus = menuDao.findMenusByUserName(username,systemName,parentId);
    		if(listMenus != null && !listMenus.isEmpty()){
    			for (SysMenu menu:listMenus) {
    				setChildMenus(menu,username,systemName);
    			}
    		}
    		return listMenus;
    	}
    
    
    	/**
    	 * 递归
    	 * @param sysMenu 菜单对象
    	 * @param username 用户名
    	 * @param systemName 系统名称
    	 */
    	private void setChildMenus(SysMenu sysMenu,String username,String systemName){
            List<SysMenu> result = menuDao.findMenusByUserName(username, systemName,sysMenu.getId());
            if(result != null && !result.isEmpty()){
                sysMenu.setSubMenus(result);
                for (SysMenu menu:result) {
                    setChildMenus(menu,username,systemName);
                }
            }
        }
    

    dao.java代码

    /**
    	 * 根据用户名username和系统systemName去查询菜单信息
    	 * @param username
    	 * @return
    	 */
    	List<SysMenu> findMenusByUserName(@Param("username")String username,@Param("systemName")String systemName,@Param("parentId")Long parentId);
    
    

    dao.xml代码

    <select id="findMenusByUserName" resultType="com.open.capacity.model.system.SysMenu">
    		SELECT e.* from sys_user a
    			LEFT JOIN sys_role_user b on a.id=b.userId
    			LEFT JOIN sys_role c on c.id=b.roleId
    			LEFT JOIN sys_role_menu d on d.roleId=c.id
    			LEFT JOIN sys_menu e ON e.id=d.menuId
    			LEFT JOIN sys_role_permission f ON f.roleId=c.id
    			LEFT JOIN sys_permission g ON f.permissionId=g.id
    			LEFT JOIN sys_system h ON h.id=g.systemId
    			WHERE 1=1
    			<if test="username!=null and username!=''">
    				AND a.username=#{username}
    			</if>
    			<if test="systemName!=null and systemName!=''">
    				AND h.name=#{systemName}
    			</if>
    			<if test="parentId == null"><!-- 如果父id没有值,默认查询第一层 -->
    				AND e.parentId=-1
    			</if>
    			<if test="parentId != null and parentId != ''"><!-- 如果父id有值,则查询该父id下面的子id -->
    				AND e.parentId=#{parentId}
    			</if>
    			AND e.id IS NOT NULL  GROUP BY e.id
    	</select>
    
    cs