快速开发平台 fast_security_admin:动态Menu与Entity
Posted liu++
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速开发平台 fast_security_admin:动态Menu与Entity相关的知识,希望对你有一定的参考价值。
快速开发平台 fast_security_admin(二):动态Menu与Entity
做了一点简单的更新,有通用接口确实好一点,但是用mybatis-plus也是很简单,所以到后期就把方法补齐不再用通用接口。
需求提出
- 动态的menu。
- 因为是后台系统,前端免不了有大量list,表数据可以用v-for渲染但是表头还要自己写,不方便,有大量重复工作!
- 菜单绑定entity的id,通过entity_id查entity。
解决方案
数据库建menu表和entity表。
menu表:
entity表:
具体实现
很简单,利用mybatis-plus生成menu的类、entity的类。
需要的方法有
public interface MenuService extends IService<Menu> {
/*
* 获得status不为0的menu列表
* */
ServerResponse listMenu();
/*
* 根据parentid生成menu的树
* */
ServerResponse menuTree();
}
这里简单看一下生成树状结构的方法,用递归。
@Service
public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements MenuService {
@Resource
private MenuMapper menuMapper;
@Override
public ServerResponse menuTree() {
//获得普通menu列表
List<Menu> menus=menuMapper.listMenu();
if(menus.size()==0){
return ServerResponse.error(-1,"可用menu列表为空");
}
//生成menuTree
List<MenuChildrenDTO> menuTree = createMenuTree(0, menus);
return ServerResponse.succese(menuTree);
}
/*
* 递归生成菜单树
* 时间复杂度 O(n^2)?
* */
private List<MenuChildrenDTO> createMenuTree(int i, List<Menu> menus) {
List<MenuChildrenDTO> treeMenu = new ArrayList<>();
for (Menu menu : menus) {
if (i == menu.getParentId()) {
MenuChildrenDTO menuChildrenDTO=new MenuChildrenDTO();
menuChildrenDTO.setMenu(menu);
menuChildrenDTO.setMenus(createMenuTree(menu.getId(),menus));
treeMenu.add(menuChildrenDTO);
}
}
return treeMenu;
}
}
可以看到需要一个menuDTO
@Data
public class MenuChildrenDTO {
private Menu menu;
private List<MenuChildrenDTO> menus;//子节点
}
但是时间复杂度比较高,考虑优化算法,或者把生成树的过程放到前端完成!
时间复杂度好像是O(n^2),唉我太菜。
再看一下entity表以及它的方法和类,这里就用到了通用接口,还是比较方便的。
我们从菜单获取绑定的entity的id
,然后通过
@GetMapping("getById/{entity}/{id}")
public ServerResponse getById(@PathVariable("entity")String entity,@PathVariable("id")Integer id) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
//entity="entity" id=?
return fastService.getById(entity,id);
}
这个通用接口获得表头数据。
列表的填充数据再建实体类以及它的mapper、service就可以了,然后调用@GetMapping(“list/{entity}”)这个通用接口。
其他更新
做成了多模块项目,很简单,这样看着也比较清楚。
推荐一个开源项目:mall非常不错,是一个商城项目,有配套的教程,参考之后不一定要做商城,可以把权限部分方到自己的项目,它的权限部分后来又重写了变成了一个单独项目,推荐,没收钱哈哈。
github太卡大家自己搜就好了。
欢迎大家关注。
以上是关于快速开发平台 fast_security_admin:动态Menu与Entity的主要内容,如果未能解决你的问题,请参考以下文章