2.15 Mybatis——权限管理模拟登陆练习(中)

该博客介绍了如何使用MyBatis通过一句SQL查询实现用户登录时获取其对应的角色和菜单信息。在UserDao层定义了login01方法,UserMapper.xml中配置了复杂的查询语句,通过left join连接多个表。查询结果映射到User对象,包括其角色(Role)和菜单(Menu)集合。测试结果显示,成功获取并打印了用户信息、角色及角色对应的菜单。
摘要由CSDN通过智能技术生成

方式二:

此处采用一对多的方式二,通过一条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());
        }
    }

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值