其中用户名是不可修改的并且是在进个人资料页面时就从session获取值并将值加入到控件中
获取用户信息的SQL语句
update t_user set python=?,email=?,gender=?,modified_user=?,modified_time=? where uid=?
根据uid查询用户数据
select * from t_user where uid=?
根据uid查询用户数据不需要再重复开发
更新用户的信息方法的定义
/**
* 参数为user的方法
* @param user 用户的数据
* @return 返回值为受影响的行数
*/
Integer updateInfoByUid(User user);//也可以用三个String的形参接收电话,邮箱,性别,但不如直接写个user省事
在UserMapper.xml文件中进行映射编写
update t_user
set
phone = #{phone},
email = #{email},
gender = #{gender},
modified_user = #{modifiedUser},
modified_time = #{modifiedTime}
where uid=#{uid}
@Test
public void updateInfoByUid() {
User user = new User();
user.setUid(11);
user.setPhone("13333688");
user.setEmail("[email protected]");
user.setGender(1);
userMapper.updateInfoByUid(user);
}
1.当打开页面时显示当前登录的用户的信息
2.点击修改按钮时更新用户的信息
- 点击个人资料页面时可能找不到用户的数据
- 点击修改按钮时可能找不到用户数据,也可能修改时出现未知错误
1.业务层有两个功能模块,对应的是两个抽象方法的设计,并且这两个功能都涉及到用户是否存在的查询操作,所以需要在业务层设计根据用户uid查询数据的方法(持久层已经设计过该方法,但是没有在业务层实现该方法的调用)
/**
* 根据用户的uid查询用户数据
* @param uid 用户uid
* @return 用户数据
*/
User getByUid(Integer uid);
/**
* uid通过控制层在session中获取然后传递给业务层,并在业务层封装到User对象中
* */
void changeInfo(Integer uid,User user);
2.在实现类中实现当前的抽象方法
/**
* 根据用户的id查询用户的数据
* @param uid
* @return
*/
@Override
public User getByUid(Integer uid) {
//判断用户是否存在
User result = userMapper.findByUid(uid);
if(result==null || result.getIsDelete()==1){
throw new UserNotFoundException("用户数据不存在");
}
/**
* 将数据直接传递给前端
*/
User user = new User();
user.setUsername(result.getUsername());
user.setPhone(result.getPhone());
user.setGender(result.getGender());
user.setEmail(result.getEmail());
return user;
}
/**
* 更新用户的数据操作【SpringBoot实现依赖注入时,自动提交表单的数据,所以我们手动将用户的uid和username加入到user中】
* User中的数据phone email gender 手动将uid,username进行封装
* @param uid 用户的id
* @param username 用户的名称
* @param user 用户对象的数据
*/
@Override
public void changeInfo(Integer uid, String username, User user) {
//判断用户是否存在
User result = userMapper.findByUid(uid);
if(result==null || result.getIsDelete()==1){
throw new UserNotFoundException("用户数据不存在");
}
user.setUid(uid);
user.setUsername(username);
//潜在参数
user.setModifiedTime(new Date());
user.setModifiedUser(username);
Integer rows = userMapper.updateInfoByUid(user);
if(rows!=1){
throw new UpdateException("更新数据时产生未知的异常");
}
}
@Test
public void getByUid() {
//err是为了让输出信息为红色
System.err.println(userService.getByUid(11).getUsername());
}
@Test
public void changeInfo() {
User user = new User();
//这四个属性值在真实开发中都是在控制层就已经自动封装在User对象中了
//而uid需要由控制层传给业务层并在业务层封装到user中
user.setPhone("123456789");
user.setEmail("[email protected]");
user.setUsername("mxy");
user.setGender(0);
userService.changeInfo(11,user);
}
没有新的异常,所以这里不需要有操作
1.设计一打开页面就发送当前用户数据的查询
- /users/get_by_uid
- GET
- HttpSession session(用于获取uid)
- JsonResult
2.点击修改按钮发送用户的数据修改操作
- users/change_info
- POST
- User user,HttpSession session(用于获取uid)
- JsonResult
/**
* 根据uid查询用户信息,并展示在页面
* @param session
* @return
*/
@GetMapping("/get_by_uid")
public JsonResult getByUid(HttpSession session){
User data = userService.getByUid(getuidFromSession(session));
return new JsonResult<>(OK,data);
}
启动服务,先登录账号然后在地址栏输入http://localhost:8080/users/get_by_uid看看状态码是否为200并且看data值是否不为null
/**
* 点击更新按钮,修改用户信息
* @param user
* @param session:这里使用session是为了获取用户的uid和username
* @return
*/
@PostMapping("/change_info")
public JsonResult changeInfo(User user,HttpSession session){
//user对象有四部分数据:username,phone,email,gender
//uid数据需要再次封装到user中【SpringBoot实现依赖注入时,自动提交表单的数据,所以我们手动将用户的uid加入到user中】
Integer uid = getuidFromSession(session);
String username = getUsernameFromSession(session);
userService.changeInfo(uid,username,user);
return new JsonResult<>(OK);
}
1.在打开userdata.html(个人资料)页面自动发送ajax请求(get_by_uid),查询到的数据填充到这个页面
2.在检测到用户点击了修改按钮后发送一个ajax请求(change_info)
该ajax函数需要和上一个ajax同级
$("#btn-change-info").click(function() {
$.ajax({
url: "/users/update_information",
type: "POST",
data: $("#form-change-info").serialize(),
dataType: "JSON",
success: function(json) {
if (json.state == 200) {
alert("用户信息修改成功");
location.href = "userdata.html";//修改完重新加载当前页面
} else {
alert("修改失败 -> 原因:" + json.message);
}
},
error: function (xhr) {
alert("未知的异常 在 修改用户信息" + xhr.message);
alert("....")
location.href = "login.html";
}
});