SSM项目实战之十一:用户信息的添加

用户信息添加流程图

在这里插入图片描述

用户控制层

控制层添加跳转页面的方法

    /**
     * 进入添加或者修改页面
     * @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 }&nbsp;&nbsp;
                    </c:forEach>
                </div>
               
            </li>
            <li><label>&nbsp;</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 }&nbsp;&nbsp;
		            </c:forEach>
		        </div>
		       
		    </li>
		    <li><label>&nbsp;</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>

测试

在这里插入图片描述
添加成功
在这里插入图片描述
用户和角色的关联关系也添加成功
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值