mapper实现对应接口,和sql语句的拼写
public interface MenuMapper {
//由于前台于后台字段名不一样,另外我们只需要前台显现的数据
//aid,属于角色表中的
//pid可以权限表中 的,可以分类不同的功能模块(管理)
@Select("select mid,mname title,url href from t_menu where mid in (select mid from t_role_menu where rid in(select rid from t_admin_role where aid = #{param1})) and pid =#{param2}")
List<TreeMenu> selectTree(int aid,int pid);
}
实体类是因为前后台的显示的字段名不一致,所以另外创建了一个类,但在sql中起别名的方式,保存到数据库
因为使用的是layui的方式,它使用的是键值对的方式进行传输的
所以service创建接口的时候,使用的是map的方式:
public interface MenuService {
//因为一级模块和二级模块的key不一样,可以在单独创建一个类保存,同时也可以使用map方法
Map<String,Object> findTree(int aid);
}
实现类:
@Service
public class MenuServiceImpl implements MenuService{
@Autowired
private MenuMapper menuMapper;
@Override
public Map<String, Object> findTree(int aid) {
//一级菜单
List<TreeMenu> listOne = menuMapper.selectTree(aid,0);
//将集合遍历,取出一级菜单下的pid,作为二级菜单的mid
for (TreeMenu t:listOne
) {
Integer mid = t.getMid();
//把一级菜单的mid变成二级菜单的pid
List<TreeMenu> listTwo = menuMapper.selectTree(aid, mid);
//System.out.println(listTwo);
t.setChild(listTwo);//把二级菜单保存到一级菜单中
}
//System.out.println("----------");
//System.out.println(listOne);
//以上总体可以得到前端页面中的menuInfo,但是logoInfo和homeInfo得不到,但是可以通过map进行设置
Map<String ,Object> map = new HashMap<>();
//应该保存到数据库中,但是因为不经常使用,所以直接写在代码中
//再前端页面中,还有两个需要设置logoInfo、homeInfo
map.put("homeInfo",new TreeMenu("首页","page/welcome-2.html",""));
map.put("logoInfo",new TreeMenu("Tingyu主持人","index.html","images/logo.png"));
//把获取到的菜单指定前端的key中,value的值就是获得菜单
map.put("menuInfo",listOne);
return map;
}
}
controller:
@RestController
@RequestMapping("/MenuController")
//@RestController代表整个类都是post请求
public class MenuController {
@Autowired
private MenuService menuService;
//实现用户的权限,本质就是获得用户的aid,然后拿着这个aid去后台进行验证,获取用户的aid,可以再登录验证时,将用户的数据保存到session中
@RequestMapping("/findTree")
public Map<String,Object> findTree(HttpSession session){
Admin admin = (Admin) session.getAttribute("admin");
//System.out.println(admin.getAid());
//获取用户的aid
return menuService.findTree(admin.getAid());
}
}