@Data public class SubMenuVo { private String sid; private String sTitle; private String sPath; }
2.在service层初始化接口
public interface MainMenuService extends IService<MainMenu> { List<MainMenuVo> listTree(); }
3.在具体类中实现该方法
@Service public class MainMenuServiceImpl extends ServiceImpl<MainMenuMapper, MainMenu> implements MainMenuService { @Resource //实现依赖注入,自身方法用baseMapper即可调用 private SubMenuMapper subMenuMapper; @Override public List<MainMenuVo> listTree() { //创建MainMenuVo的存储列表,用于封装 子项(此处为children列表) List<MainMenuVo> list=new ArrayList<>(); //查询父,子数据库表,为封装做准备 List<MainMenu> mainMenus = baseMapper.selectList(null); List<SubMenu> subMenus = subMenuMapper.selectList(null); for(MainMenu m:mainMenus){ //遍历父表,将属性拷贝到父Vo中 MainMenuVo vo=new MainMenuVo(); BeanUtils.copyProperties(m,vo); for (SubMenu s:subMenus) { //遍历子表,如果子Vo的属性与对应的子类不同(SubMenuVo与SubMenu属性不对应), //不能用BeanUtils.copyProperties进行属性拷贝 SubMenuVo svo = new SubMenuVo(); svo.setSid(s.getId()); svo.setSPath(s.getPath()); svo.setSTitle(s.getTitle()); if (m.getId().equals(s.getPid())){ //封装 vo.getChildren().add(svo); } } list.add(vo); } return list; } }
4.使用
@GetMapping("/list") @ApiOperation("获取所有主菜单对象") public R list(){ List<MainMenuVo> list = mainMenuService.listTree(); return R.ok().data("items",list); }