1.概要
前一章节完成了用户信息的注册、登录、详细信息查询,以及线程池与拦截器技术。
这一章完善了用户信息更新/更改功能,包括昵称、邮箱、头像、密码等...
而后接触到了本地上传和云上传,其二者区别:
选择本地上传还是云上传取决于具体的业务需求、预算、数据量、以及对速度和可靠性的要求。对于需要高可靠性和可扩展性的大规模数据存储,云上传通常是更好的选择。而对于小型项目或对成本敏感的场景,本地上传可能更加合适。
借助阿里云的OSS对象存储服务,更方便的使网站,去进行静态内容托管、备份和归档。
2.更新用户信息
2.1 映射类UserMapper
文件地址:org/example/mapper/UserMapper.java
now():获得数据库的系统时间
package org.example.mapper;
import ...
@Mapper
public interface UserMapper {
...
...
//更新用户表,设计昵称邮箱等数值
@Update("update user set nickname=#{nickname},email=#{email},update_time=#{updateTime} where id=#{id}")
void update(User user);
//更新用户头像
@Update("update user set user_pic=#{avatarUrl},update_time=now() where id=#{id}")
//创建updateAvatar接口,Integer规范数据为整型
void updateAvatar(String avatarUrl,Integer id);
//更新用户密码
@Update("update user set password=#{rePassword},update_time=now() where id=#{id}")
void updatePassword(String rePassword,Integer id);
}
2.2 业务层UserService
2.2.1 创建接口
文件地址:org/example/service/UserService.java
//更新用户信息
void update(User user);
//更新用户头像
void updateAvatar(String avatarUrl);
//更新用户密码
void updatePassword(String rePassword);
2.2.2 实现接口
文件地址:org/example/service/impl/UserServiceImpl.java
package org.example.service.impl;
import ...
@Service
public class UserServiceImpl implements UserService {
......
......
//实现用户信息更新
@Override
public void update(User user) {
//设置用户更新时间为当前系统时间
//LocalDateTime.now()获得系统时间
user.setUpdateTime(LocalDateTime.now());
userMapper.update(user);
}
//实现用户头像更新
@Override
public void updateAvatar(String avatarUrl) {
//由于请求后,线程池中将会存放该用户的信息,包含ID值
Map<String,Object> map = ThreadLocalUtil.get();
Integer id = (Integer) map.get("id");
userMapper.updateAvatar(avatarUrl, id);
}
//实现用户密码更新
@Override
public void updatePassword(String rePassword) {
Map<String,Object> map = ThreadLocalUtil.get();
Integer id = (Integer) map.get("id");
String md5String = Md5Util.getMD5String(rePassword);
userMapper.updatePassword(md5String, id);
}
}
2.3 控制层UserController
文件地址:org/example/controller/UserController.java
@RequestBody:将前端传来的数据自动转换成JSON格式的字符串,并且为对象User赋值
@Validate:开启参数校验
//更新用户信息
@PutMapping("/update")
public Result update(@RequestBody @Validated User user){
//调用业务层的更新用户方法
userService.update(user);
return Result.success();
}
@PutMapping("/updateavatar")
//更新用户头像信息
public Result updateAvatar(@RequestParam String avatarUrl){
userService.updateAvatar(avatarUrl);
return Result.success();
}
//更新用户密码信息
@PostMapping("/updatePwd")
public Result updatePwd(@RequestBody Map<String,String> params){
// 获得前端传来的旧密码,新密码,确认密码
// 校验数据
String old