现在的位置: 首页 > 综合 > 正文

java代码实现递归@oneToMany

2013年10月01日 ⁄ 综合 ⁄ 共 1591字 ⁄ 字号 评论关闭
 /**
 * 类:  <code> MenuService </code>
 * 功能描述: 新增根据菜单编码递归删除菜单及所有子菜单方法
 * 创建人: 马素文
 * 创建日期: 2010-9-07 下午02:10:39
 * 开发环境: JDK6.0
 */
public class MenuService 
{
	 
	/**
	 * @Fields leafList : 根菜单集合
	 */
	List<MenuInfo> leafList = null;

	
	/**
	 * 
	 * 功能描述: 根据菜单编码删除菜单对象
	 * @param menuCode 菜单编码
	 * @return  boolean,删除成功,返回true,删除失败,返回false
	 * 
	 */
	public boolean delMenuInfoByMenucode( String menuCode )
	{
		//删除成功与否标志
		boolean flag = false;
		try
		{
			if( menuCode != null )
			{	
				//递归获得所有属于当前菜单编码的叶编码
				leafList = getLeaf( menuCode );
				if( leafList != null && !leafList.isEmpty() )
				{	//倒序循环删除菜单记录
					for ( int i = leafList.size()-1; i >= 0; i-- )
					{
						if( leafList.get(i) != null )
						{
							baseDao.delete( leafList.get(i) );
						}
					}
					flag = true;
				}
			}
		} catch (Exception e)
		{
			e.printStackTrace();
			flag = false;
		}
		return flag;
	}

	/**
	 * 
	 * 功能描述: 获得当前菜单编码所有叶子菜单编码
	 * @param menuCode 菜单编码
	 * @return List 菜单集合
	 */
	public List<MenuInfo> getLeaf( String menuCode )
	{
		leafList = new ArrayList<MenuInfo>();
		leafList = addToMenuInfoList(menuCode,leafList);
		if( leafList != null && !leafList.isEmpty() )
		{
			return leafList;
		}
		return null;
	}

	/**
	 * 功能描述:递归调用方法
	 * @param menuCode 菜单编码
	 * @param pList 菜单默认集合大小
	 * @return List 菜单集合
	 */
	public List<MenuInfo> addToMenuInfoList( String menuCode,List<MenuInfo> pList )
	{
		//根据菜单编码查找根菜单集合
		List<MenuInfo> pMenuInfotList = baseDao.findByHql("FROM MenuInfo menu WHERE menu.parentCode = ? and menu.isAvailability = ? order by menu.displayOrder ", menuCode,false);
		//根据菜单编码获取菜单对象
		MenuInfo menuInfo = (MenuInfo) baseDao.findByHql( "FROM MenuInfo menu WHERE menu.menuCode = ?", menuCode ).get(0);
		//根菜单集合为空
		if( pMenuInfotList.size() <= 0 && menuInfo == null )
		{
			//菜单对象放入 菜单默认集合
			pList.add( menuInfo );
		}
		else
		{	
			//取得集合中第一条记录
			pList.add( menuInfo );
			for( int i = 0; i < pMenuInfotList.size(); i++ )
			{
				//根据集合中第一天记录遍历叶子菜单
				addToMenuInfoList( pMenuInfotList.get(i).getMenuCode(),pList );
			}
		}
		return pList;
	}

}

【上篇】
【下篇】

抱歉!评论已关闭.