mybatis根据用户id查询角色以及角色对应的权限

查询到的数据

{
    "name": "admin",
    "role": {
        "id": 1,
        "name": "管理员",
        "permissionList": [{
            "id": 1,
            "name": "总公司"
        }, {
            "id": 2,
            "name": "信息部"
        }]
    },
    "userId": 39
}

1.mapper文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<!--column:表示数据库中的字段列名;property:表示实体类对应的字段名-->
<mapper namespace="com.sqxinxibu.neikanhoutai.dao.UserDao" >
    <!--用户-->
    <!--<resultMap id="UserRolePermissionMap" type="UserRolePermission">-->
        <!--<result property="userId" column="id" />-->
        <!--<result property="name" column="name" jdbcType="VARCHAR"/>-->
        <!--<collection property="roleList" column="id" javaType="list" select="selectAllRoles"></collection>-->
        <!--<collection property="permissionList" column="id" javaType="list" select="selectAllpermissions"></collection>-->
    <!--</resultMap>-->
    <resultMap id="UserRolePermissionMap" type="UserRolePermission">
        <result property="userId" column="id" />
        <result property="name" column="name" jdbcType="VARCHAR"/>
        <collection property="role" column="id" javaType="com.sqxinxibu.neikanhoutai.entity.Roles" select="selectAllRoles"></collection>
    </resultMap>
    <!--权限-->
    <resultMap id="PermissionMap" type="com.sqxinxibu.neikanhoutai.entity.Permission" >
        <id column="id" property="id" jdbcType="INTEGER" />
        <result column="name" property="name" jdbcType="VARCHAR" />
    </resultMap>
    <!--角色-->
    <resultMap id="RolesMap" type="com.sqxinxibu.neikanhoutai.entity.Roles" >
        <id column="id" property="id" jdbcType="INTEGER" />
        <result column="name" property="name" jdbcType="VARCHAR" />
        <!--权限集合-->
        <collection property="permissionList" column="id" javaType="list" select="selectAllpermissions"></collection>
    </resultMap>
    <!--根据角色id查询权限(先从角色权限关联表查询角色id相等,在查询权限id,根据权限id在权限表里查询权限)-->
    <select id="selectAllpermissions" resultType="com.sqxinxibu.neikanhoutai.entity.Permission" parameterType="java.lang.Integer">
        select id,name from sys_menu where id in (select sys_role_menu.menu_id from sys_role_menu where sys_role_menu.role_id=#{id})
     </select>
    <!--根据用户中的角色查询角色-->
    <select id="selectAllRoles" resultMap="RolesMap" parameterType="java.lang.Integer">
        select id,name from sys_role where id in (select sys_user_role.role_id from sys_user_role where sys_user_role.user_id=#{id})
    </select>
    <select id="chaxunByUserId" resultMap="UserRolePermissionMap" parameterType="java.lang.Integer" >
            select * from  user where id=#{id}
    </select>


</mapper>

2.实体类:

2.1返回的实体类:

//用户返回对象
public class UserRolePermission {

        private int userId;
        private String name;

        private Roles role;

        public int getUserId() {
                return userId;
        }

        public void setUserId(int userId) {
                this.userId = userId;
        }

        public String getName() {
                return name;
        }

        public void setName(String name) {
                this.name = name;
        }

        public Roles getRole() {
                return role;
        }

        public void setRole(Roles role) {
                this.role = role;
        }
}

2.2:角色实体类:

//角色
public class Roles {

        private Integer id;

        private String name;

        private List<Permission> permissionList;

        public Integer getId() {
            return id;
        }

        public void setId(Integer id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public List<Permission> getPermissionList() {
            return permissionList;
        }

        public void setPermissionList(List<Permission> permissionList) {
            this.permissionList = permissionList;
        }


        @Override
        public String toString() {
            return "Roles [id=" + id + ", name=" + name + ", permissionList=" + permissionList + "]";
        }


}

2.3权限实体类:

//权限
public class Permission {
    private Integer id;
    private String name;
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    
    @Override
    public String toString() {
        return "Permission{" +
                "id=" + id +
                ", name=" + name +
                '}';
    }
}

3.表结构:

3.1用户表:

3.2角色表:

 

3.3权限表:

3.2用户和角色关联表:

3.5角色和权限关联表:

4.dao层:

public interface UserDao {
  
    //根据用户id查询角色和权限信息
    UserRolePermission chaxunByUserId(int id);

    //根据
}

5.service层:

@Service("userService")
public class UserServiceImpl implements UserService {

    @Resource
    private UserDao userDao;
 
    public UserRolePermission chaxunByUserId(int id){
        UserRolePermission userRolePermission=userDao.chaxunByUserId(id);
        System.out.println("查询到的用户信息==="+ JSON.toJSONString(userRolePermission));
        return  userRolePermission;
    }


}

6.controller层:

@RestController
public class IndexController {
   
    @Autowired
    private UserServiceImpl userService;

    @RequestMapping("/test")
    public String test(@RequestParam int userid){
        System.out.println("用户id==="+userid);
        UserRolePermission userRolePermission=userService.chaxunByUserId(userid);
        String json=JSON.toJSONString(userRolePermission);
        System.out.println("查询返回信息:"+ json);
        return  json;
    }
}
  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
mybatis是一个开源的持久层框架,可用于Java中的关系型数据库访问。在mybatis中,可以通过配置XML文件或注解的方式进行数据库操作。 实现用户角色权限外关联查询可以分为以下几个步骤: 1. 创建用户角色权限的实体类,并在类中定义相应的属性和方法。 ```java public class User { private int id; private String username; private Role role; // 省略getter和setter方法 } public class Role { private int id; private String roleName; private List<Permission> permissions; // 省略getter和setter方法 } public class Permission { private int id; private String permissionName; // 省略getter和setter方法 } ``` 2. 在mybatis配置文件中,通过<resultMap>标签定义结果映射,将查询结果封装到实体类中。 ```xml <resultMap id="userResultMap" type="User"> <id property="id" column="id"/> <result property="username" column="username"/> <association property="role" resultMap="roleResultMap"/> </resultMap> <resultMap id="roleResultMap" type="Role"> <id property="id" column="id"/> <result property="roleName" column="role_name"/> <collection property="permissions" ofType="Permission"> <id property="id" column="id"/> <result property="permissionName" column="permission_name"/> </collection> </resultMap> ``` 3. 在SQL语句中使用JOIN关键字进行的关联查询,并在SELECT语句中包含需要查询的字段。 ```xml <select id="getUserWithRoleAndPermission" resultMap="userResultMap"> SELECT u.id, u.username, r.id, r.role_name, p.id, p.permission_name FROM user u JOIN role r ON u.role_id = r.id JOIN role_permission rp ON r.id = rp.role_id JOIN permission p ON rp.permission_id = p.id </select> ``` 4. 在Java程序中调用mybatis的接口方法执行查询操作,并获取到结果。 ```java public interface UserMapper { User getUserWithRoleAndPermission(); } UserMapper userMapper = sqlSession.getMapper(UserMapper.class); User user = userMapper.getUserWithRoleAndPermission(); ``` 通过以上步骤,就可以实现用户角色权限的外关联查询,并将查询结果封装到实体类中。这样在Java程序中就可以方便地获取到用户角色权限的相关信息了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值