个人资料
(一)个人资料(持久层)
1.规划sql
根据用户id修改信息的SQL语句
update t_user set python=?,email=?,gender=?,modified_user=?,modified_time=? where uid=?
根据用户id查询的sql语句
select * from t_user where uid=?
2.接口与抽象方法
更新用户的信息方法的定义
//根据id修改 Integer updateInfoByUid(User user);
在UserMapper.xml文件中进行映射编写
<update id="updateInfoByUid" > update t_user set <!--if是条件判断标签,属性test接受的是一个返回值为boolean类型的条件, 如果test条件的结果为true则执行if标签内部的语句,注意逗号也要在标签内--> <if test="phone!=null">phone=#{phone},</if> <if test="email!=null"> email=#{email},</if> <if test="gender!=null">gender=#{gender},</if> modified_user=#{modifiedUser}, modified_time=#{modifiedTime} where uid=#{uid} </update>
二)个人资料(业务层)
设计两个功能:
1.当打开页面时显示当前登录的用户的信息
2.点击修改按钮时更新用户的信息
1.异常规划
点击个人资料页面时可能找不到用户的数据
点击修改按钮时可能找不到用户数据,也可能修改时出现未知错误
2.设计接口和抽象方法及实现
业务层有两个功能模块,对应的是两个抽象方法的设计,并且这两个功能都涉及到用户是否存在的查询操作,所以需要在业务层设计根据用户uid查询数据的方法(持久层已经设计过该方法,但是没有在业务层实现该方法的调用)
//修改个人资料 uid通过控制层在session中获取然后传递给业务层,并在业务层封装到User对象中 void changeInfo(Integer uid,String username,User user); //根据id查询 User getByUid(Integer uid);
在实现类中实现当前的抽象方法
@Override public void changeInfo(Integer uid, String username, User user) { //查询用户是否存在 User user1=userMapper.findUid(uid); if (user1==null || user1.getIsDelete()==1){ throw new UsernameNotFoundException("用户不存在"); } //User对象中的数据只有phone,email,gender,username,因为springboot进行依赖 //注入的时候只注入表单中数据的值,所以需要手动将uid封装到user中 user.setUid(uid); user.setUsername(username); user.setModifiedUser(username); user.setModifiedTime(new Date()); Integer rows= userMapper.updateInfoByUid(user); if (rows!=1){ throw new UpdateException("修改时出现未知异常"); } } @Override public User getByUid(Integer uid) { User user1=userMapper.findUid(uid); if (user1==null || user1.getIsDelete()==1){ throw new UsernameNotFoundException("用户不存在"); } User user=new User(); user.setUsername(user1.getUsername()); // user.setModifiedUser(user1.getModifiedUser()); // user.setModifiedTime( user1.getModifiedTime()); user.setEmail( user1.getEmail()); user.setPhone(user1.getPhone()); user.setGender(user1.getGender()); return user; }
(三)个人资料(控制层)
1.设计请求
1.设计一打开页面就发送当前用户数据的查询:
请求路径: /users/get_by_uid
请求方式:GET
请求参数:HttpSession session(用于获取uid)
响应结果:JsonResult< User>
2.点击修改按钮发送用户的数据修改操作
请求路径:users/change_info
请求方式:POST
请求参数:User user,HttpSession session(用于获取uid)
响应结果:JsonResult< Void>
2.处理请求
@GetMapping("/get_by_uid") public JsonResult<User> getbyUid(HttpSession session){ User user=userService.getByUid(getuidfromsession(session)); return new JsonResult<>(ok,user); } @PostMapping("/change_info") public JsonResult<Void> changeinfo(User user,HttpSession session){ Integer getuidfromsession = getuidfromsession(session); String getusernamesession = getusernamesession(session); userService.changeInfo(getuidfromsession,getusernamesession,user); return new JsonResult<>(ok); }
四)个人资料(前端页面)
在打开userdata.html(个人资料)页面自动发送ajax请求(get_by_uid),查询到的数据填充到这个页面
$(document).ready(function () { $.ajax({ url:"/users/get_by_uid", type:"GET", data:$("#form-change-info").serialize(), dataType:"JSON", //2.发送ajax()的异步请求来完成用户的注册功能 success:function (json) { if (json.state==200){ $("#username").val(json.data.username); $("#phone").val(json.data.phone); $("#email").val(json.data.email); var radio=json.data.gender==0 ? $("#gender-female") : $("#gender-male"); //prop()表示给某个元素添加属性及属性值 radio.prop("checked","checked"); }else{ alert("用户数据不存在"); } }, error:function (xhr) { alert("查询用户信息产生未知异常"+xhr.message); } }); });
在检测到用户点击了修改按钮后发送一个ajax请求(change_info)
(该ajax函数需要和上一个ajax同级)
//1.监听按钮是否被点击 $("#btn-change-info").click(function () { $.ajax({ url:"/users/change_info", type:"POST", data:$("#form-change-info").serialize(), dataType:"JSON", //2.发送ajax()的异步请求来完成用户的注册功能 success:function (json) { if (json.state==200){ alert("修改成功"); //跳转系统主页index。html //相对路径 location.href="userdata.html"; }else{ alert("修改失败失败"); } }, error:function (xhr) { alert("修改产生未知异常"+xhr.message); } }); });
上传头像
(一)上传头像(持久层)
1.规划sql
update t_user set avatar=?,modified_user=?,modified_time=? where uid=?
2.接口设计和实现方法
在UserMapper接口中定义一个抽象方法用于修改用户的头像
//修改用户头像 Integer updateAvatarByUid(@Param("uid") Integer uid, @Param("avatar") String avatar, @Param("modifiedUser") String modifiedUser, @Param("modifiedTime") Date modifiedTime);
在UserMapper.xml文件中进行映射编写
<!-- 上传头像--> <update id="updateAvatarByUid"> update t_user set avatar=#{avatar}, modified_user=#{modifiedUser}, modified_time=#{modifiedTime} where uid=#{uid} </update>
(二)上传头像(业务层)
1.规划异常
用户数据不存在,找不到对应的用户数据
更新的时候,出现未知异常
(前面已经写过)
2.设计接口和抽象方法及实现
uid,avatar,modifiedUser,modifiedTime,其中modifiedTime是在方法中创建的,uid和modifiedUser从session中获取,但是session对象是在控制层的并不会出现在业务层,所以业务层要保留这两个参数,以便控制层可以传递过来
//修改头像 void changeAvatar(Integer uid,String avatar,String username);
编写业务层的更新用户头像的方法
//修改头像 @Override public void changeAvatar(Integer uid, String avatar, String username) { User user1 = userMapper.findUid(uid); if (user1==null || user1.getIsDelete()==1){ throw new UsernameNotFoundException("用户不存在"); } Integer rows= userMapper.updateAvatarByUid(user1.getUid(),avatar,username,new Date()); if (rows!=1){ throw new UpdateException("上传时出现未知异常"); } }