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测试