Spring练习-CRUD操作[5]-添加用户

本文详述了使用Spring进行CRUD操作时,如何实现用户添加功能,包括用户与角色的关联。首先分析了用户添加的步骤,接着展示了如何在添加用户页面动态加载角色列表,然后详细讲解了UserController、UserService和UserDao中实现添加用户及角色的代码,并提供了测试方法。
摘要由CSDN通过智能技术生成

Spring练习-CRUD操作[5]-添加用户

1.用户添加的步骤分析

① 点击列表页面新建按钮跳转到角色添加页面
② 输入角色信息,点击保存按钮,表单数据提交服务器
③ 编写RoleController的save()方法
④ 编写RoleService的save()方法
⑤ 编写RoleDao的save()方法
⑥ 使用JdbcTemplate保存Role数据到sys_role
⑦ 跳转回角色列表页面

2.打包部署空项目

在这里插入图片描述
在这里插入图片描述因为用户角色是动态获取的,不能直接跳转到user-add.jsp,需要先请求获取全部角色后,再重定向到user-add.jsp

3.编写在添加用户页面展示角色列表的代码

3.1 在UserController中添加展示角色列表的方法

    @Autowired
    private RoleService roleService;

    @RequestMapping(value = "/saveUI",method =RequestMethod.GET)
    public ModelAndView saveUI(){
        ModelAndView modelAndView =new ModelAndView();
        //获取角色集合
        List<Role> roleList = roleService.showList();
        modelAndView.addObject("roleList",roleList);
        //获取完roleList后,跳转到user-add.jsp
        modelAndView.setViewName("user-add");
        return modelAndView;
    }

3.2 修改jsp

//------------user-list.jsp-------------
<button type="button" class="btn btn-default" title="新建"
onclick="location.href='${pageContext.request.contextPath}/user/saveUI'">
 <i class="fa fa-file-o"></i>新建</button>

//-----------user-add.jsp-----------------
<div class="col-md-2 title">用户角色</div>
<div class="col-md-10 data">
	<c:forEach items="${roleList}" var="role">
		<input class="" type="checkbox" name="roleIds" value="${role.id}">${role.roleName}
	</c:forEach>
</div>

3.3测试

在这里插入图片描述

4.编写添加用户的代码

难点:获取插入用户时数据库自动生成的id.
解决方法:
1.使用spring-jdbc 的jdbcTemplate中的更新方法
在这里插入图片描述

2.使用mybatis

4.1 UserController中添加用户的方法

    @RequestMapping(value = "save",method = RequestMethod.POST)
    public String save(User user,Long[] roleIds){
        userService.save(user,roleIds);
        //插入数据后,重定向到获取用户列表的controller
        return "redirect:/user/list";
    }

4.2 UserService中添加用户的方法

 @Override
    public void save(User user, Long[] roleIds) {
        Long userId = userDao.save(user);
        for (Long role : roleIds) {
            userDao.saveUserRoleRelation(userId,role);
        }
    }

4.3UserDao中添加用户和添加用户角色的方法(难点)

 @Override
    public Long save(User user) {
        //难点在获取插入数据库后自动生成的主键!
        //创建PreparedStatementCreator
        PreparedStatementCreator psc = new PreparedStatementCreator() {
            @Override
            public PreparedStatement createPreparedStatement(Connection connection)
                    throws SQLException {
                //使用原始的jdbc完成PreparedStatement的组建
                String sql= "insert into sys_user values(?,?,?,?,?)";
                //此处要设置PreparedStatement.RETURN_GENERATED_KEYS,来获取生成的主键
                PreparedStatement statement =
                        connection.prepareStatement(sql,
                                PreparedStatement.RETURN_GENERATED_KEYS);
                statement.setObject(1,null);  //主键为null,数据库自动生成
                statement.setString(2,user.getUsername());
                statement.setString(3,user.getEmail());
                statement.setString(4,user.getPassword());
                statement.setString(5,user.getPhoneNum());
                return statement;
            }
        };
        //创建KeyHolder
        KeyHolder keyHolder=new GeneratedKeyHolder();
        jdbcTemplate.update(psc,keyHolder);
        //通过keyHolder获取主键
        return keyHolder.getKey().longValue();
    }

    @Override
    public void saveUserRoleRelation(Long userId, Long role) {
        String sql = "insert into sys_user_role values(?,?)";
        jdbcTemplate.update(sql, userId, role);
    }

4.4修改jsp

user-list.jsp
在这里插入图片描述
user-add.jsp
在这里插入图片描述

4.5测试

在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值