好好编程-物流项目11【用户管理-修改和删除】

简介: 在上文的基础上来完成用户的修改和删除

在上文的基础上来完成用户的修改和删除

20190321173915242.png


用户管理


1.修改用户


1.1用户界面调整


20190321205835575.png20190321205644338.png


1.2控制层调整

2019032120574579.png


@Override
public void getUpdateUserInfo(Integer id,Model model) {
  RoleExample roleExample = new RoleExample();
  List<Role> roles = roleMapper.selectByExample(roleExample );
  if(id !=null && id > 0){
    // 表示更新数据,需要根据id查询用户信息
    User user = userMapper.selectByPrimaryKey(id);
    // 查询用户具有的角色信息
    List<Integer> roleIds = userMapper.selectRoleIdByUserId(id);
    model.addAttribute("user", user);
    model.addAttribute("roleIds", roleIds);
  }
  model.addAttribute("roles", roles);
}


UserMapper接口

List<Integer> selectRoleIdByUserId(Integer id);


sql语句

 <!-- 根据用户编号查询对应的角色信息 -->
 <select id="selectRoleIdByUserId" resultType="int">
  select role_id from t_user_role where user_id = #{id}
 </select>


1.3修改页面

<form action="/user/saveOrUpdate">
  <ul class="forminfo">
    <input type="hidden" name="user.userId" value="${user.userId}">
    <li><label>账号</label>
      <input name="user.userName"  type="text" value="${user.userName}"
      class="dfinput" />
      <i>账号不能超过30个字符</i>
    </li>
    <li><label>姓名</label>
      <input name="user.realName" type="text" value="${user.realName}"
      class="dfinput" />
    </li>
    <li><label>密码</label>
      <input name="user.password" type="password" value="${user.password}"
      class="dfinput" />
    </li>
    <li><label>确认密码</label>
      <input name="confirmPassword" value="${user.password}"
      type="password" class="dfinput" />
    </li>
    <li><label>电话</label>
      <input name="user.phone" type="text" value="${user.phone}"
      class="dfinput" /><i></i>
    </li>
    <li><label>邮箱</label>
      <input name="user.email" type="text" value="${user.email}"
      class="dfinput" /><i></i>
    </li>
    <li><label>分配角色</label>
        <div style="height: 32px;line-height: 32px;">
          <c:set var="flag" value="false"></c:set>
          <c:forEach items="${roles }" var="role">
            <!-- 
              每循环一次 判断取出来的角色编号在不在用户具有的角色集合中
              在就设置flag=true
              不在就设置flag=false
             -->
             <c:forEach items="${roleIds }" var="roleId">
              <c:if test="${roleId eq role.roleId }">
                <c:set var="flag" value="true"></c:set>
              </c:if>
             </c:forEach>
            <input type="checkbox"  ${flag eq true?'checked':'' } value="${role.roleId }" name="roles">
             ${role.roleName }&nbsp;&nbsp;
            <c:set var="flag" value="false"></c:set> 
          </c:forEach>
        </div>
      </li>
    <li><label>&nbsp;</label>
      <input name="" type="submit"
      class="btn" value="确认保存" /></li>
    </ul>
</form>

20190321211855941.png20190321211940929.png



1.4提交修改数据


 控制层不用修改,修改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存在,说明是更新
    // 修改用户
    userMapper.updateByPrimaryKeySelective(user);
    // 根据用户ID删除管理的角色信息
    userMapper.deleteRoleIdByUserId(user.getUserId());
    // 再保存用户和角色的关联关系
    if(roles!=null && roles.size() > 0){
      for (Integer roleId : roles) {
        userMapper.inserUserIdAndRoleId(user.getUserId(),roleId);
      }
    }
  }else{
    // 不存在id说明是添加数据
    // 先添加用户数据 获取生成的userId
    userMapper.insert(user);
    // 再保存用户和角色的对应关系,在一个事务中处理
    if(roles!=null && roles.size() > 0){
      for (Integer roleId : roles) {
        userMapper.inserUserIdAndRoleId(user.getUserId(),roleId);
      }
    }
  }
}


UserMapper接口

void deleteRoleIdByUserId(Integer userId);


sql语句

  <delete id="deleteRoleIdByUserId">
    delete from t_user_role where user_id=#{id}
  </delete>

测试修改


20190321214642908.png20190321214705242.png20190321214723510.png


修改成功!


2.删除用户


 本来用户是不用真的删除的,实际中我们会给用户表添加一个是否删除的字段,删除数据只需要修改该字段即可,也就是我们常说的伪删除,在此处我们来介绍下真实删除(有关联关系的情况下)


2.1提交删除请求


20190321215201519.png


2.2处理删除请求


控制器

@RequestMapping("/delete")
public String deleteUser(Integer id) throws Exception{
  userService.deleteUser(id);
  return "redirect:/user/query";
}


service实现类中的方法

@Override
public void deleteUser(int id) throws Exception {
  // 1.删除用户和角色的关联关系
  userMapper.deleteRoleIdByUserId(id);
  // 2.删除用户
  userMapper.deleteByPrimaryKey(id);
}


测试:


2019032121553614.png20190321215547685.png20190321215609982.png



删除成功。

在有外键关联的时候,我们需要先删除关联的数据然后再删除主表数据。


相关文章
预约抢单互助系统开发详细功能/需求方案/步骤功能/逻辑项目/源码案例
The development model of appointment and order grabbing mutual assistance system is a widely used development model on mutual assistance service platforms. It adopts a combination of appointment and order grabbing modes, allowing users to make appointments or actively participate in mutual assistanc
|
7月前
|
搜索推荐 物联网 计算机视觉
二二复制公排模式系统开发|案例分析
无论未来做什么样的社交+零售模式
|
7月前
|
新零售 搜索推荐
三三复制公排滑落商城系统开发|详情方案
不能向客户提供高品质的购物体验,不能让顾客感受商品和服务,不能降低物流成本
|
安全 区块链 数据安全/隐私保护
dapp互助预约排单二二复制/三三复制大小公排项目系统开发稳定版/玩法详情/指南教程/规则方案/需求设计/案例源码
能合约在代码中加入了许多安全校验机制,比如对输入参数范围的检查、防止重入攻击的修复等。并且智能合约在运行过程中记录每一笔交易以及合约状态的变化,确保所有的交易和状态都是经过验证和授权的,不会受到篡改。
|
小程序 前端开发
【易售小程序项目】修改“我的”界面前端实现;查看、重新编辑、下架自己发布的商品【后端基于若依管理系统开发】
【易售小程序项目】修改“我的”界面前端实现;查看、重新编辑、下架自己发布的商品【后端基于若依管理系统开发】
91 0
|
存储 安全 前端开发
预约上门按摩项目系统开发详细流程/案例介绍/功能逻辑/需求方案/源码模式
确定系统的目标用户,例如个人用户或企业用户。 - 确定系统的核心功能,如用户注册和登录、服务列表和预约管理、支付和评价反馈等。 - 确定技术平台和开发语言,如Web应用还是移动应用,以及开发语言和框架的选择。 - 制定项目计划,并确定开发阶段和时间安排。
上门按摩预约系统开发方案项目/案例详细/需求逻辑/流程设计/源码功能
Implement a user authentication mechanism to ensure the authenticity and security of user identities.
|
缓存 安全 NoSQL
人事项目开发记录-登录模块
人事项目开发记录-登录模块
|
SQL 前端开发 Java
校园外卖点餐系统——Day01【项目简介、开发环境搭建、后台系统登录和退出功能】
校园外卖点餐系统——Day01【项目简介、开发环境搭建、后台系统登录和退出功能】
202 0
校园外卖点餐系统——Day01【项目简介、开发环境搭建、后台系统登录和退出功能】
|
JavaScript 前端开发 测试技术
【测试开花】六、项目管理-前后端-实现编辑功能
【测试开花】六、项目管理-前后端-实现编辑功能
【测试开花】六、项目管理-前后端-实现编辑功能