方式二:
此处采用一对多的方式二,通过一条sql语句查出用户对应的角色和菜单信息。
代码实现:
UserDao层方法:
//方式二:一句sql——传入两个参数——通过用户名、密码登录 User login01(@Param("uname") String uname,@Param("pwd") String pwd);
UserMapper.xml:通过两层collection集合映射实现。
<mapper namespace="com.zx.dao.UserDao"> <!--login01方式二——一句sql实现--> <select id="login01" resultMap="userResult01"> select u.uid uid,u.uname uname,u.pwd pwd,u.age age,r.rid rid,r.rname rname,r.rdescription rdescription,m.mid mid,m.mname mname,m.murl murl from t_user u left join t_user_role ur on u.uid=ur.uid left join t_role r on ur.rid=r.rid left join t_role_menu rm on r.rid=rm.rid left join t_menu m on rm.mid=m.mid where uname=#{uname} and pwd=#{pwd}; </select> <resultMap id="userResult01" type="com.zx.pojo.User"> <id column="uid" property="uid"></id> <result column="uname" property="uname"></result> <result column="pwd" property="pwd"></result> <result column="age" property="age"></result> <!--集合映射——查询角色--> <collection column="rid" property="roles" ofType="com.zx.pojo.Role"> <id column="rid" property="rid"></id> <result column="rname" property="rname"></result> <result column="rdescription" property="rdescription"></result> <!--集合映射——查询菜单--> <collection column="mid" property="menus" ofType="com.zx.pojo.Menu"> <id column="mid" property="mid"></id> <result column="mname" property="mname"></result> <result column="murl" property="murl"></result> </collection> </collection> </resultMap> </mapper>
在mybatis-config.xml中添加sql映射路径:
<mappers> <mapper resource="com/zx/dao/UserMapper.xml"></mapper> </mappers>
运行测试:
@Test public void login01Test(){ SqlSession sqlSession = MybatisUtil.getSqlSession(); UserDao userDao = sqlSession.getMapper(UserDao.class); User user = userDao.login01("王磊", "123456"); System.out.println(user); //接收角色信息 List<Role> roles = user.getRoles(); //遍历角色信息 for(Role role:roles){ System.out.println(role); //打印角色对应的菜单 System.out.println(role.getMenus()); } }
运行结果: