功能分析:要做修改,先要查到id对应的用户信息和角色信息,再修改保存。
选中一条记录,对记录进行修改,进入修改页面
上级部门的获取 deptById–SysUser
角色的勾选获取 userRole
第一部分:修改前操作。查询:查询id对应用户信息,和角色信息
一、Dao
SysRoleDao
// 修改前:查询用户信息 --把返回的结果封装到vo中:
SysUserDeptResult findObjectById(Integer id);
SysUserRole
List<Integer> findRoleIdsByUserId(Integer id);
二、Mapper
user
<!--修改用户信息前:查找id对应的用户个人信息-->
<select id="findObjectById" parameterType="int" resultMap="userDeptResult">
select *
from sys_users
where id=#{id}
</select>
userrole
<select id="findRoleIdsByUserId" resultType="int">
select role_id
from sys_user_roles
where user_id=#{userId}
</select>
三、Service
// 基于用户id 查询用户个人信息,用户角色信息,存放在map中
Map<String,Object> findObjectById(Integer userId);
// 修改前操作:查看用户个人信息和角色信息
@Override
public Map<String, Object> findObjectById(Integer userId) {
// 合法性验证
if(userId==null||userId<=0){
throw new IllegalArgumentException("id值不正确");
}
// 调用查询用户信息
SysUserDeptResult user = sysUserDao.findObjectById(userId);
if(user==null)
throw new ServiceException("此用户已经不存在");
// 调用查询用户部门信息
List<Integer> roleIds = sysUserRoleDao.findRoleIdsByUserId(userId);
// 返回结果
Map<String,Object> map=new HashMap<>();
map.put("user",user);
map.put("roleIds",roleIds);
return map;
}
四、Controller
// 修改用户前:查询用户对应个人信息和用户的角色信息
@RequestMapping("doFindObjectById")
@ResponseBody
public JsonResult doFindObjectById(Integer id){
Map<String,Object> map=
sysUserService.findObjectById(id);
return new JsonResult(map);
}
测试一下吧:
要求:不进行密码修改 在页面上如果是修改操作,不显示密码行
给密码行添加一个id,找到初始化页面的部分,移除掉密码行
第二部分==修改提交
要求:修改数据时不对密码进行操作
一、Dao:涉及两个表的操作,1.用户信息(除密码)2.清除掉原先的用户与角色对应信息,添加新的用户与角色对应信息
SysUserDao
// 修改用户信息
int updateObject(SysUser entity);
SysUserRoleDao
// 修改操作: 基于用户id删除对应角色旧数据
int deleteObjectsByUserId(Integer roleId);
// 修改操作:添加 id与角色对应关系 已有
int insertObject(@Param("userId") Integer userId,
@Param("roleIds") Integer[] roleIds);
二、Mapper:思考不适用的动态sql如何进行if判定
SysUserMapper
<!--修改用户信息-->
<update id="updateObject" parameterType="com.jt.sys.SysUser">
update sys_users
<set>
<if test="username!=null and username!=''">
username=#{username},
</if>
<if test="email!=null and email!=''">
email=#{email},
</if>
<if test="mobile!=null and mobile!=''">
mobile=#{mobile},
</if>
<if test="deptId!=null and deptId!=''">
deptId=#{deptId},
</if>
<if test="modifiedUser!=null and modifiedUser!=''">
modifiedUser=#{modifiedUser},
</if>
modifiedTime=now()
</set>
where id=#{id}
</update>
SysUserRoleMapper
<!--根据用户id删除角色id 返回值int-->
<delete id="deleteObjectsByUserId" parameterType="int">
delete from sys_user_roles
where user_id=#{userId}
</delete>
三、Service
// 修改用户信息 传值 用户信息和角色
int updateObject(SysUser entity,Integer[] roleIds);
@Override
public int updateObject(SysUser entity, Integer[] roleIds) {
// 合法性验证
// 1.实体内容不能为空
if(entity==null){
throw new IllegalArgumentException("保存对象不能为空");
}
//// 2.用户名不能为空
if(StringUtils.isEmpty(entity.getUsername()==null)){
throw new IllegalArgumentException("用户名不能为空");
}
// 调用方法
// 保存用户自身信息
int rows = sysUserDao.updateObject(entity);
// 删掉原始勾选角色
sysUserRoleDao.deleteObjectsByUserId(entity.getId());
// 重新保存角色关系
sysUserRoleDao.insertObject(entity.getId(),roleIds);
// 返回结果
return rows;
}
四、Controller
// 修改用户信息
@RequestMapping("doUpdateObject")
@ResponseBody
public JsonResult doUpdateObject(SysUser entity,Integer[] roleIds){
sysUserService.updateObject(entity,roleIds);
return new JsonResult("update ok!");
}