当前位置 博文首页 > yuanting_的博客:JVAVA递归查询数据库,生成tree菜单
/**
* 根据用户名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);
}
}
}
/**
* 根据用户名username和系统systemName去查询菜单信息
* @param username
* @return
*/
List<SysMenu> findMenusByUserName(@Param("username")String username,@Param("systemName")String systemName,@Param("parentId")Long parentId);
<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