好好编程-物流项目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
|
9月前
|
安全
dapp互助预约排单系统开发步骤指南/案例设计/规则详细/方案逻辑/源码程序
-Determine the core functions and objectives of the system, understand user needs and expectations.
|
1月前
|
新零售 搜索推荐
三三复制公排滑落商城系统开发|详情方案
不能向客户提供高品质的购物体验,不能让顾客感受商品和服务,不能降低物流成本
|
1月前
|
安全 BI 定位技术
同城校园外卖跑腿系统开发规则详细/需求步骤/案例设计/功能逻辑/源码版
同城校园外卖跑腿系统是为满足校园内用户对食品和商品的快速配送需求而设计的一种服务平台。
|
8月前
|
安全 区块链 数据安全/隐私保护
dapp互助预约排单二二复制/三三复制大小公排项目系统开发稳定版/玩法详情/指南教程/规则方案/需求设计/案例源码
能合约在代码中加入了许多安全校验机制,比如对输入参数范围的检查、防止重入攻击的修复等。并且智能合约在运行过程中记录每一笔交易以及合约状态的变化,确保所有的交易和状态都是经过验证和授权的,不会受到篡改。
|
8月前
|
存储 前端开发 安全
dapp矩阵公排互助预约排单抢单项目系统开发指南流程丨案例设计丨功能逻辑丨规则玩法丨项目方案丨源码程序
需求分析:与团队明确系统的需求和目标,包括公排互助预约排单抢单项目系统的功能、规则、奖励机制等方面。
|
8月前
|
小程序 前端开发
【易售小程序项目】修改“我的”界面前端实现;查看、重新编辑、下架自己发布的商品【后端基于若依管理系统开发】
【易售小程序项目】修改“我的”界面前端实现;查看、重新编辑、下架自己发布的商品【后端基于若依管理系统开发】
67 0
|
9月前
|
存储 安全 前端开发
预约上门按摩项目系统开发详细流程/案例介绍/功能逻辑/需求方案/源码模式
确定系统的目标用户,例如个人用户或企业用户。 - 确定系统的核心功能,如用户注册和登录、服务列表和预约管理、支付和评价反馈等。 - 确定技术平台和开发语言,如Web应用还是移动应用,以及开发语言和框架的选择。 - 制定项目计划,并确定开发阶段和时间安排。
|
9月前
|
安全
上门按摩预约系统开发方案项目/案例详细/需求逻辑/流程设计/源码功能
Implement a user authentication mechanism to ensure the authenticity and security of user identities.
|
11月前
|
SQL 安全 关系型数据库
案例07-在线人员列表逻辑混乱
在线人员列表逻辑混乱