从mysql查询菜单表用java生成菜单树
来源:互联网 发布:宏业软件怎么用 编辑:程序博客网 时间:2024/06/11 02:59
做的时候采用的框架是springboot+jpa
菜单表如下:
菜单实体:
@Entity@Table(name = "t_sys_menu")public class SysMenuDTO{ private Long id; private String name; //菜单名称 private Long parentId; //父菜单id @Transient private List<SysMenuDTO> childMenu = new ArrayList<SysMenuDTO>(); //setter/getter略}
Controller层(运用了swagger-ui):
@RestController@RequestMapping("/api/sys/menu")public class MenuController extends BaseController{ @Autowired private MenuBO menuBO;/** * 菜单树,根据传入的菜单id查询该菜单下的所有子菜单 * @param menuId * @return */ @RequestMapping(value = "/getMenuTree",method = RequestMethod.GET) @ApiOperation(value = "菜单树",notes="菜单树") @ApiImplicitParams({ @ApiImplicitParam(name = "menuId",value = "菜单id",dataType = "Long",paramType = "query") }) @ApiResponses(value = {@ApiResponse(code = 200,message = "菜单树")}) public JsonMessage<String> getMenuTree(@RequestParam(value = "menuId",required = false) Long menuId) { return JsonMessage.successed(JsonUtil.toDefaultJSONString(menuBO.generateTreeNode(menuId),null)); }}
Service层:
@Servicepublic class MenuBo{ @Autowired private SysMenuBO sysMenuBO; /** * 生成菜单树 * @param rootId * @return */ public SysMenuDTO generateTreeNode(Long rootId){ SysMenuDTO root = null; List<SysMenuDTO> childrenTreeNode = new ArrayList<>(); if (rootId != null){ root = sysMenuBO.findOne(rootId); //根据id查询父菜单对象 childrenTreeNode = this.getChildNode(rootId); //查询子菜单对象 }else { root = sysMenuBO.findOne(new NumberCondition("parentId",0,NumberCondition.Handler.EQUAL)); childrenTreeNode = this.getChildNode(root.getId()); } for (SysMenuDTO item:childrenTreeNode){ SysMenuDTO node = this.generateTreeNode(item.getId()); root.getChildMenu().add(node); } return root; } /** * 查询所有子菜单 * @param nodeId * @return */ public List<SysMenuDTO> getChildNode(Long nodeId){ //根据父id查询所有子菜单 List<SysMenuDTO> childNodeList = sysMenuBO.findAll(new NumberCondition("parentId",nodeId,NumberCondition.Handler.EQUAL)); if(childNodeList .size()==0){ return null; } return childNodeList ; }}
SysMenuBO继承自BaseBO,BaseBO里面有封装好的查询方法
public class BaseBO<T extends AbstractBaseDTO,K extends Serializable> { @PersistenceContext public EntityManager em; @Autowired public BaseDAO<T,K> repository; @Transactional public void deleteAll(){ repository.deleteAll(); } public List<T> findAll(BaseCondition condition){ Specification<T> specification= ConditionUtil.getSpecificationByCondition(condition); return repository.findAll(specification); } public T findOne(K k){ return repository.findOne(k); } public T findOne(BaseCondition condition){ Specification<T> specification= ConditionUtil.getSpecificationByCondition(condition); return repository.findOne(specification); }}
当然也可以自己在DAO层里写查询方法。
这样返回的结果就是:
- 首页
- 系统管理
- 用户管理
- 新增用户
- 角色管理
- 用户管理
- 系统管理
这样返回的是一个对象
阅读全文
0 0
- 从mysql查询菜单表用java生成菜单树
- java从数据库读取菜单,递归生成菜单树
- 如何用javaScript结合从数据库中查询到的角色权限信息动态生成树菜单
- QMenu 设置菜单图标 & 生成菜单树
- 从xml文件取数据生成菜单
- ASP.NET从数据表生成动态菜单
- LigurUi + spring mybatis mysql 菜单递归查询
- mysql通过自定义函数查询一级菜单
- ORACLE 递归查询 菜单树
- 菜单查询,关联别的表
- DWZ 动态生成树菜单
- 用jquery生成二级菜单
- java生成的菜单被窗口挡住
- Java由HashMap生成树形菜单/部门
- MySQL菜单父子表排序
- java菜单
- java 菜单
- java 菜单
- mfc中注册表的使用
- uwp跟随系统主题颜色
- 初探gulp
- python numpy库中的数据存取和函数
- c语言的union和struct
- 从mysql查询菜单表用java生成菜单树
- 算法提高 棋盘多项式
- STM32单片机和MATLAB的USB串口通信,运行MATLAB时STM32就出现复位的问题的解决方法。
- swjtu2382(Paint Box)
- C3常用属性
- shell ' ', " " 和 `` 的区别
- 1059: [ZJOI2007]矩阵游戏
- linux支持大磁盘配置
- Educational Codeforces Round 21 C. Tea Party 贪心