7.24 zr实习日记

实习日记

学习内容

今天是用户管理系统的最后一天的学习。今天主要是实现角色管理功能。角色分为管理员和用户。点击用户列表右边的添加角色,可以进入到user-update.jsp页面,从而给用户添加角色。在这里插入图片描述
首先,在数据库中新建表tb_role和表user_role。表tb_role中有三个字段:(int) id、 (varchar) rolename、(rvarchar) roledesc。id为1角色为管理员admin,id为2角色为用户user。表user_role中只有两个字段,分别为userId和roleId,分别对象表tb_user和tb_role的id字段。
创建了数据库表之后,建立对应的实体类

package com.zr.bean;

public class Role {
    private int id;
    private String rolename;
    private String roledesc;

    public Role(){}
    public Role(int id, String rolename, String roledesc) {
        this.id = id;
        this.rolename = rolename;
        this.roledesc = roledesc;
    }

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

    public void setRolename(String rolename) {
        this.rolename = rolename;
    }

    public void setRoledesc(String roledesc) {
        this.roledesc = roledesc;
    }

    public int getId() {
        return id;
    }

    public String getRolename() {
        return rolename;
    }

    public String getRoledesc() {
        return roledesc;
    }

    @Override
    public String toString() {
        return "Role{" +
                "id=" + id +
                ", rolename='" + rolename + '\'' +
                ", roledesc='" + roledesc + '\'' +`
                '}';
    }
}

package com.zr.bean;

public class UserRole {
    private int userId;
    private int roleId;

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

    public void setRoleId(int roleId) {
        this.roleId = roleId;
    }

    public int getUserId() {
        return userId;
    }

    public int getRoleId() {
        return roleId;
    }

    @Override
    public String toString() {
        return "UserRole{" +
                "userId=" + userId +
                ", roleId=" + roleId +
                '}';
    }
}

先来改写登录,期望得到的结果是,管理员登陆进去之后能显示角色管理,但是普通用户登录就不显示角色管理。则需要在登陆的时候通过id来确定角色。通过userServiceImpl的login()方法来得到id,再通过该id在user_role里查找roleId,来确定角色。

  @RequestMapping("login.do")
    public ModelAndView login(User user,HttpSession session){
        //调用service层
        //视图解析器
        //得到id.判断角色
        int id= userService.login(user.getUsername(),user.getPassword());
        ModelAndView modelAndView = new ModelAndView();
        if(id!=-1){
            //跳转到成功页面
            //根据id去user_role表里边查角色,得到id的集合
            List<Integer> roleIds=roleService.findRoleByUserId(id);
            //放置用户信息
            session.setAttribute("user",user);
            session.setAttribute("roleIds",roleIds);
            modelAndView.setViewName("main");
        }else{
            modelAndView.setViewName("../failer");
        }
        return modelAndView;
    }

userServiceImpl的login()方法改写为:

    @Override
    public int login(String username, String password) {
        User user = userDao.findUserByname(username);
        if(user!=null&&user.getPassword().equals(password)){
            return user.getId();
        }
        return -1;  //表示用户不存在
    }

同时在dao层新建IRoleDao,在service层新建IRoleService接口和相对应的实现类。其他实现和之前的类似。
在登录部分添加了权限之后,接下来实现给添加角色功能。
在主页面点击“添加角色”进入到user-role-add.jsp页面,首先在controller层实现这个页面跳转。

    @RequestMapping("toAddRole.do")
    public ModelAndView toAddRole(int id){
        //根据id把没有的角色查出来
        //查询出来一个集合
        List<Role> roleList= roleService.findNotRoleByUserId(id);
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("roles",roleList);
        modelAndView.setViewName("user-role-add");
        modelAndView.addObject("id",id);
        return modelAndView;
    }

service层调用的是dao层,IRoleDao中的接口List findNotRoleByUserId(int id);在RoleMapper.xml中的SQL语句:

 <select id="findNotRoleByUserId" parameterType="int" resultType="role">
        select * from tb_role where id not in (select roleId from user_role where userId = #{id})
    </select>

添加角色页面如下所示,页面上显示的是不存在的角色,可以自行添加。
在这里插入图片描述
这一部分显示出来之后,接下来做的就是添加角色。勾选了角色之后,点击保存,则成功地给该用户添加了一个角色。在user-role-add.jsp文件中找到“保存”按钮,发现此按钮点击事件对应的是addRole()方法。

<div class="box-tools text-center">
					<button type="button" class="btn bg-maroon" onclick="addRoles()">保存</button>
					<button type="button" class="btn bg-default"
						onclick="history.back(-1);">返回</button>
				</div>

在下边的js代码中找到该方法,通过location.href="/user/addRole.do?roleIds="+roleList.toString()+"&userId="+userId;来获得用需要添加的角色的id(存在List集合中)和用户id,在controller层调用service层的addRole,将roleId,userId封装到UserRole的对象中
以下是controller层的代码,因为可能会同时添加多个角色,则就会有多个roleId,通过逗号分隔。

    @RequestMapping("addRole.do")
    public String addRole(String roleIds,String userId){
        //根据逗号来切割
        String[] strs=roleIds.split(",");
        List<Integer> ids=new ArrayList<>();
        for(String s:strs){
            ids.add(Integer.parseInt(s));//强转
        }
        roleService.addRole(ids,Integer.parseInt(userId));
        return "redirect:findAll.do";
    }

以下是service层的代码:

    @Override
    public void addRole(List<Integer> ids,int userId) {
        ///需要一条一条的添加
        for(int i:ids){
            UserRole userRole = new UserRole();
            //把值塞进去给对象
            userRole.setRoleId(i);
            userRole.setUserId(userId);
            //调用dao层插入到数据库
            //应该插入到表user_role里边
            roleDao.insertRole(userRole);
        }
    }

最后一步,就是将添加的角色保存到数据库表user_role中,在RoleMapper.xml中SQL语句:

    <insert id="insertRole" parameterType="com.zr.bean.UserRole">
        insert into user_role(userId,roleId) values (#{userId},#{roleId})
    </insert>

上边的页面:用户wawa的角色是user,所以点击添加角色之后出现的只有admin,现在将admin角色添加给wawa用户。
在这里插入图片描述
确认添加之后,再次回到用户列表页面,点击wawa后边对应的“添加角色”,这个时候,添加啊角色这里已经不显示任何角色了。因为wawa有两个角色:user和admin.
在这里插入图片描述
此时数据库表user_role中也可以看到,userId为3的用户有两个角色,roleId有1和2
在这里插入图片描述
今天的学习就结束了~

总结

今天把小组项目的注册、登录和订单管理实现了。在实现的过程中也出现了一些问题,但是几乎都是之前上课的时候出现过的问题,所以也能知道是错在哪里了,知道怎么去解决。也有平时没有遇到的问题,就去搜了一下,实在解决不了的去问了老师,老师也非常有耐心的帮我解答。今天的任务还是比较多了,除了要消化上课讲的,看上课写的代码还要写小组项目,虽然任务很多,但是很充实,改bug的过程是很烦躁的,但是改出来之后的那种成就感超级棒!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值