我们现在可以添加用户了,接下来要完成的是用户信息修改,这个需要我们编写后端的SQL语句和Java代码,本小节咱们就来实现后端部分的程序。
一、编写持久层代码
因为我们无法判断用户在弹窗页面中修改了用户信息的哪部分,所以我们编写UPDATE语句需要判断提交的数据只要不为空,就更新到数据表中。
在TbUserDao.xml
文件中,声明UPDATE语句。
<update id="update" parameterType="HashMap">
UPDATE tb_user
SET
<if test="username!=null and password!=null">
username = #{username},
password = HEX(AES_ENCRYPT(#{password},#{username})),
</if>
<if test="name!=null">
name = #{name},
</if>
<if test="sex!=null">
sex = #{sex},
</if>
<if test="tel!=null">
tel = #{tel},
</if>
<if test="email!=null">
email = #{email},
</if>
<if test="hiredate!=null">
hiredate = #{hiredate},
</if>
<if test="role!=null">
role = #{role},
</if>
<if test="root!=null">
root = #{root},
</if>
<if test="deptId!=null">
dept_id = #{deptId},
</if>
<if test="status!=null">
status = #{status},
</if>
id=id
WHERE id=#{userId}
</update>
在TbUserDao.java
接口中,定义抽象方法。
@Mapper
public interface TbUserDao {
……
public int update(HashMap param);
}
二、编写业务层代码
在UserService.java
接口中,声明抽象方法。
public interface UserService {
……
public int update(HashMap param);
}
在UserServiceImpl.java
类中,实现抽象方法。
public class UserServiceImpl implements UserService {
……
@Override
public int update(HashMap param) {
int rows = userDao.update(param);
return rows;
}
}
三、编写Web层代码
创建UpdateUserForm.java
类,用于保存Ajax提交的数据。
@Schema(description = "修改用户信息表单")
@Data
public class UpdateUserForm {
@NotNull(message = "userId不能为空")
@Min(value = 1, message = "userId不能小于1")
@Schema(description = "用户ID")
private Integer userId;
@NotBlank(message = "username不能为空")
@Pattern(regexp = "^[a-zA-Z0-9]{5,20}$", message = "username内容不正确")
@Schema(description = "用户名")
private String username;
@NotBlank(message = "password不能为空")
@Pattern(regexp = "^[a-zA-Z0-9]{6,20}$", message = "password内容不正确")
@Schema(description = "密码")
private String password;
@NotBlank(message = "name不能为空")
@Pattern(regexp = "^[\\u4e00-\\u9fa5]{2,10}$", message = "name内容不正确")
@Schema(description = "姓名")
private String name;
@NotBlank(message = "sex不能为空")
@Pattern(regexp = "^男$|^女$", message = "sex内容不正确")
@Schema(description = "性别")
private String sex;
@NotBlank(message = "tel不能为空")
@Pattern(regexp = "^1\\d{10}$", message = "tel内容不正确")
@Schema(description = "电话")
private String tel;
@NotBlank(message = "email不能为空")
@Email(message = "email内容不正确")
@Schema(description = "邮箱")
private String email;
@NotBlank(message = "hiredate日期不能为空")
@Pattern(regexp = "^((((1[6-9]|[2-9]\\d)\\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\\d|3[01]))|(((1[6-9]|[2-9]\\d)\\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\\d|30))|(((1[6-9]|[2-9]\\d)\\d{2})-0?2-(0?[1-9]|1\\d|2[0-8]))|(((1[6-9]|[2-9]\\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$", message = "hiredate内容不正确")
@Schema(description = "入职日期")
private String hiredate;
@NotEmpty(message = "role不能为空")
@Schema(description = "角色")
private Integer[] role;
@NotNull(message = "deptId不能为空")
@Min(value = 1, message = "deptId不能小于1")
@Schema(description = "部门")
private Integer deptId;
}
在UserController.java
类中,定义Web方法。
public class UserController {
……
@PostMapping("/update")
@SaCheckPermission(value = {"ROOT", "USER:UPDATE"}, mode = SaMode.OR)
@Operation(summary = "修改用户")
public R update(@Valid @RequestBody UpdateUserForm form) {
HashMap param = JSONUtil.parse(form).toBean(HashMap.class);
param.replace("role", JSONUtil.parseArray(form.getRole()).toString());
int rows = userService.update(param);
if (rows == 1) {
//修改资料后,把该用户踢下线
StpUtil.logoutByLoginId(form.getUserId());
}
return R.ok().put("rows", rows);
}
}