文章目录
用户信息添加流程图
用户控制层
控制层添加跳转页面的方法
/**
* 进入添加或者修改页面
* @param id
* @return
*/
@RequestMapping("/userUpdate")
public String userUpdatePage(Integer id,Model model){
// 查询添加或者更新需要的数据
userService.getUpdateUserInfo(id,model);
return "/user/userUpdate";
}
service层
添加如下方法
/**
* 获取添加或者修改用户需要的数据
* 添加
* 获取所有的角色信息
* 修改
* 获取所有的角色信息及根据id查询的用户信息
* @param id
* @return
*/
public void getUpdateUserInfo(Integer id,Model model);
实现类中添加
@Resource
private RoleMapper roleMapper;
@Override
public void getUpdateUserInfo(Integer id,Model model) {
RoleExample roleExample = new RoleExample();
List<Role> roles = roleMapper.selectByExample(roleExample );
model.addAttribute("roles", roles);
}
jsp页面
user.jsp页面
添加跳转到添加用户页面的链接
新建一个userUpdate.jsp作为用户添加的页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<link href="/css/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div class="place">
<span>位置:</span>
<ul class="placeul">
<li><a href="/">首页</a></li>
<li><a href="/user/query">用户管理</a></li>
</ul>
</div>
<div class="formbody">
<div class="formtitle">
<span>基本信息</span>
</div>
<ul class="forminfo">
<li><label>用户名</label>
<input name="userName" type="text"
class="dfinput" />
<i>用户名不能超过30个字符</i>
</li>
<li><label>真实姓名</label>
<input name="realName" type="text"
class="dfinput" />
</li>
<li><label>密码</label>
<input name="password" type="password"
class="dfinput" />
</li>
<li><label>确认密码</label>
<input name="confirmPassword"
type="password" class="dfinput" />
</li>
<li><label>电话</label>
<input name="phone" type="text"
class="dfinput" /><i></i>
</li>
<li><label>邮箱</label>
<input name="email" type="text"
class="dfinput" /><i></i>
</li>
<li><label>分配角色</label>
<div style="height: 32px;line-height: 32px;">
<c:forEach items="${roles}" var="role">
<input type="checkbox" value="${role.roleId }" name="roles"> ${role.roleName }
</c:forEach>
</div>
</li>
<li><label> </label>
<input name="" type="submit"
class="btn" value="确认保存" /></li>
</ul>
</div>
<div style="display: none">
<script src='http://v7.cnzz.com/stat.php?id=155540&web_id=155540'
language='JavaScript' charset='gb2312'></script>
</div>
</body>
</html>
提交数据
因为表单提交的数据有分配的角色信息,单独一个User对象并不能接收所有的数据。所以我们需要创建一个Dao对象,来保存数据。
Dao层
UserDto
package com.yjn.dto;
import java.util.List;
import com.yjn.pojo.Role;
import com.yjn.pojo.User;
public class UserDto {
//用户信息
public User user;
//关联分配的角色信息
public List<Integer> roles;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public List<Integer> getRoles() {
return roles;
}
public void setRoles(List<Integer> roles) {
this.roles = roles;
}
}
数据传输对象,即Data Transfer Object,简称DTO。 一个为了减少方法调用次数而在进程间传输数据的对象
表单域name值设置,及提交地址:
<form action="/user/saveOrUpdate">
<ul class="forminfo">
<li><label>账号</label>
<input name="user.userName" type="text"
class="dfinput" />
<i>账号不能超过30个字符</i>
</li>
<li><label>姓名</label>
<input name="user.realName" type="text"
class="dfinput" />
</li>
<li><label>密码</label>
<input name="user.password" type="password"
class="dfinput" />
</li>
<li><label>确认密码</label>
<input name="confirmPassword"
type="password" class="dfinput" />
</li>
<li><label>电话</label>
<input name="user.phone" type="text"
class="dfinput" /><i></i>
</li>
<li><label>邮箱</label>
<input name="user.email" type="text"
class="dfinput" /><i></i>
</li>
<li><label>分配角色</label>
<div style="height: 32px;line-height: 32px;">
<c:forEach items="${roles }" var="role">
<input type="checkbox" value="${role.roleId }" name="roles"> ${role.roleName }
</c:forEach>
</div>
</li>
<li><label> </label>
<input name="" type="submit"
class="btn" value="确认保存" /></li>
</ul>
</form>
控制层接收数据
UserController
/**
* 完成添加或修改操作
* @param id
* @return
* @throws Exception
*/
@RequestMapping("/saveOrUpdate")
public String saveOrUpdate(UserDto userDto) throws Exception{
userService.saveOrUpdate(userDto);
return "redirect:/user/query";
}
service接口
/**
* 保存或修改用户数据
* @param userDto
*/
public void saveOrUpdate(UserDto userDto)throws Exception;
service接口实现类
@Override
public void saveOrUpdate(UserDto userDto) throws Exception {
// 获取User对象
User user = userDto.getUser();
// 获取关联的角色信息
List<Integer> roles = userDto.getRoles();
// 判断是添加还是修改数据
if(user.getUserId()!=null && user.getUserId() > 0){
// 表示userId存在,说明是更新
}else{
// 不存在id说明是添加数据
// 先添加用户数据 获取生成的userId
userMapper.insert(user);
// 再保存用户和角色的对应关系,在一个事务中处理
if(roles!=null && roles.size() > 0){
for (Integer roleId : roles) {
userMapper.insertUserIdAndRoleId(user.getUserId(),roleId);
}
}
}
}
添加inserUserIdAndRoleId实现
自动生成key
设置UserMapper.xml文件中的insert标签
接口定义
UserMapper
public interface UserMapper {
long countByExample(UserExample example);
int deleteByExample(UserExample example);
int deleteByPrimaryKey(Integer userId);
int insert(User record);
int insertSelective(User record);
List<User> selectByExample(UserExample example);
User selectByPrimaryKey(Integer userId);
int updateByExampleSelective(@Param("record") User record, @Param("example") UserExample example);
int updateByExample(@Param("record") User record, @Param("example") UserExample example);
int updateByPrimaryKeySelective(User record);
int updateByPrimaryKey(User record);
void insertUserIdAndRoleId(Integer userId, Integer roleId);
}
在UserMapper.xml中添加
<insert id="insertUserIdAndRoleId">
insert into t_user_role(user_id,role_id)values(#{param1},#{param2})
</insert>
测试
添加成功
用户和角色的关联关系也添加成功