好好编程-物流项目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
dapp互助预约排单系统开发步骤指南/案例设计/规则详细/方案逻辑/源码程序
-Determine the core functions and objectives of the system, understand user needs and expectations.
|
算法 Perl
技术下午茶:产品经理是如何工作的?如何才算一份好的需求文档?如何设计一个简单的列表,它应该具备哪些基本功能?
技术下午茶:产品经理是如何工作的?如何才算一份好的需求文档?如何设计一个简单的列表,它应该具备哪些基本功能?
119 1
|
8月前
|
小程序 Java 关系型数据库
基于springboot的场地预约小程序的设计与实现(程序+数据库+文档)
基于springboot的场地预约小程序的设计与实现(程序+数据库+文档)
|
安全 区块链 数据安全/隐私保护
dapp互助预约排单二二复制/三三复制大小公排项目系统开发稳定版/玩法详情/指南教程/规则方案/需求设计/案例源码
能合约在代码中加入了许多安全校验机制,比如对输入参数范围的检查、防止重入攻击的修复等。并且智能合约在运行过程中记录每一笔交易以及合约状态的变化,确保所有的交易和状态都是经过验证和授权的,不会受到篡改。
|
存储 安全 前端开发
DApp公排互助预约抢单排单模式系统开发参考版/详细流程/方案逻辑/规则玩法/案例设计/源码程序
需求分析:与团队明确系统的需求、目标和范围,包括公排互助预约抢单排单模式系统的功能、规则、奖励机制等方面
|
小程序 前端开发
【易售小程序项目】修改“我的”界面前端实现;查看、重新编辑、下架自己发布的商品【后端基于若依管理系统开发】
【易售小程序项目】修改“我的”界面前端实现;查看、重新编辑、下架自己发布的商品【后端基于若依管理系统开发】
102 0
|
缓存 安全 NoSQL
人事项目开发记录-登录模块
人事项目开发记录-登录模块
|
SQL 前端开发 Java
校园外卖点餐系统——Day01【项目简介、开发环境搭建、后台系统登录和退出功能】
校园外卖点餐系统——Day01【项目简介、开发环境搭建、后台系统登录和退出功能】
206 0
校园外卖点餐系统——Day01【项目简介、开发环境搭建、后台系统登录和退出功能】
|
安全 区块链
如何创建羊了个羊链改游戏系统开发说明及源码
随着各行业都在实现区块链化,区块链的发展日益加快。在区块链上,玩家可以拥有游戏内的资产,而这些资产则有更广泛意义上的流通性;区块链游戏中资产数据的安全,可解决后端开发限制,打破头部垄断;相较传统游戏中心化的管理模式,链上游戏从技术层面赋予了更多应用场景,在未来发展中显得尤为重要。
如何创建羊了个羊链改游戏系统开发说明及源码