动态菜单5张表的实现

花了好长时间有一周多了吧,一直在学习动态菜单的做法,在这里记录一下:

1.我实现动态菜单用了5张表,user表,power表,menu表,user_power中间表,power_menu中间表,

user表

用户信息表

power表

用户权限表

menu表

菜单表

user_power中间表

用户职位中间表(user_id和power_id都是外建)

power_menu中间表

职位菜单中间表(power_id和menu_id都为外建)

有了五张表就可以往下做了,因为有了中间表,就省略了一对多的关系了

2.使用generator添加entity层,dao层,mapper层。

3.在MenuMapper.xml文件中添加多表联查,通过用户id查询其所对应的menu:

<!-- 查询菜单,传入一个userId,然后通过该ID查出其可见可菜单列表 -->
<select id="selectMenuByUSerId" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select m.* from menu m inner join pmmiddle pmm on m.menu_id = pmm.menu_id
inner join upmiddle upm on pmm.power_id =upm.power_id
where upm.user_id = #{userId}
</select>

 

多表联查,可以将一个sql语句放到一个mapper文件中。

4.在dao层中添加接口:

//定义方法selectMenuByUSerId,传入一个userId,传出一个List<Menu>
List<Menu> selectMenuByUSerId(Integer userId);

用来调用sql语句。

5.在service层中添加方法调用sql语句//通过userId查询出要返回到前台的菜单列表集合

 1 public List<Menu> selectMenuByuserID(String userName){
 2 //通过userId查询出要返回到前台的菜单列表集合
 3 public List<Menu> selectMenuByuserID(String userName){
 4 User user = selectUserByUserName(userName);
 5 int userId = user.getUserId();
 6 //接收通过sql语句查出的所有Menu集合
 7 List<Menu> menuList = selectMenuByUSerId.selectMenuByUSerId(userId);
 8 return menuList;
 9 }
10 
11 //selectUserByUserName方法,传入一个username进入到数据库中查询,传回一个User对象
12 public User selectUserByUserName(String username){
13 User user = new User();
14 user.setUserName(username);
15 //直接调用了那句sql语句
16 return userMapper.loginFindNamePwd(user);
17 }

 

6.controller层中:

在登陆的方法中调用service层的方法

1 //添加一个方法,将用户名传入查出userId,然后通过userId查出要返回到前台的菜单列表
2 List list = loginService.selectMenuByuserID(userName);
3 
4 model.addAttribute("menuList", list);//将集合添加到前台页面中。

7.jsp页面中用el表达式和jstl构建左侧菜单栏:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

 

posted @ 2017-05-16 10:13  燕麦酸奶  阅读(424)  评论(0编辑  收藏  举报