1.个人资料-持久层
1.1需要规划SQL语句
1.更新用户信息的SQL语句
update t_user set phone=?,email=?,gender=?,modified_user=?,modifier_time=? where uid=?
2.根据用户名来查询用户的数据。
select * from t_user where uid=?
查询用户的数据不需要再重复开发。
1.2 接口和抽象方法
更新用户的信息方法的定义。
/**
* 更新用户的数据信息
* @param user 用户的数据
* @return 返回值为受影响的行数
*/
Integer updateInfoByUid(User user);
1.3 抽象方法的映射
在UserMapper.xml文件中进行映射编写。
<update id="updateInfoByUid">
update t_user
set
<!-- if表示条件判断标签,test接收的是一个返回值为布尔类型的条件
如果test条件为真,则执行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>
在测试类中完成功能的测试。
@Test
public void updateInfoByUid(){
User user = new User();
user.setUid(9);
user.setPhone("18844556444");
user.setEmail("1418401993@qq.com");
user.setGender(1);
userMapper.updateInfoByUid(user);
}
2.个人资料-业务层
2.1异常规划
1.设计了两个功能:
·当打开页面时获取用户的信息并且填充到对应的文本框中。
·检测用户是否点击了修改按钮,如果检测到则执行修改用户信息的操作。
2.打开页面的时候可能找不到用户的数据,点击删除按钮之前需要再次的去检测用户的数据是否存在。
2.2 接口和抽象方法
主要有两个功能的模块,对应的是两个抽象方法的设计。
/**
* 根据用户的id查询用户的数据
* @param uid 用户id
* @return 用户的数据
*/
User getByUid(Integer uid);
/**
* 更新用户的数据操作
* @param uid 用户的id
* @param username 用户的名称
* @param user 用户对象的数据
*/
void changeInfo(Integer uid,String username,User user);
2.3 实现抽象方法
在UserServiceImpl类中添加两个抽象方法的具体实现。
@Override
public User getByUid(Integer uid) {
User result = userMapper.findByUid(uid);
if(result==null||result.getIsDelete()==1){
throw new UsernameNotFoundException("用户没有被找到");
}
User user=new User();
user.setUsername(result.getUsername());
user.setPhone(result.getPhone());
user.setEmail(result.getEmail());
user.setGender(result.getGender());
return user;
}
/**
* User对象中的数据phone/email/gender,手动再将uid,username封装在user中
* **/
@Override
public void changeInfo(Integer uid, String username, User user) {
User result = userMapper.findByUid(uid);
if(result==null||result.getIsDelete()==1){
throw new UsernameNotFoundException("用户没有被找到");
}
user.setUid(uid);
//user.setUsername(username);
user.setModifiedUser(username);
user.setModifiedTime(new Date());
Integer rows = userMapper.updateInfoByUid(user);
if(rows !=1){
throw new UpdateException("更新数据异常");
}
}
在测试类进行功能单元测试。
public void getByUid(){
System.out.println(userService.getByUid(9));
}
@Test
public void changeInfo(){
User user=new User();
user.setPhone("123123123123");
user.setEmail("123123123@qq.com");
user.setGender(0);
userService.changeInfo(9,"test03",user);
3.个人资料-控制层
3.1处理异常
暂无
3.2 设计请求
1.设置一打开页面就发送当前用户数据的查询。
/users/get_by_uid
GET
HttpSession session
JsonResult<User>
2.点击修改按钮发送用户的数据修改操作。
/users/change_info
POST
User user,HttpSession session
JsonResult<Void>
3.3 处理请求
@RequestMapping("get_by_uid")
public JsonResult<User> getByUid(HttpSession session){
User data = userService.getByUid(getUidFromSession(session));
return new JsonResult<>(OK,data);
}
@RequestMapping("change_info")
public JsonResult<Void> changeInfo(User user,HttpSession session){
//user对象中有四部分的数据:username,phone,Email,gender
//uid数据需要再次封装到user对象中
Integer uid = getUidFromSession(session);
String username=getUsernameFromSession(session);
userService.changeInfo(uid,username,user);
return new JsonResult<>(OK);
}
4.个人资料-前端页面
1.在打开userdata.html页面自动发送ajax页面(get_by_id),查询到的数据填充到这个页面上
2.在检测到用户点击了修改按钮之后发送了一个ajax请求(change_info)。
<script type="text/javascript">
$("#btn-change-info").click(function () {
$.ajax({
url:"/users/change_info",
type:"POST",
data:$("#form-change-info").serialize(),
dataType:"JSON",
success:function (json) {
if(json.state==200){
alert("用户信息修改成功");
//修改成功过后重新加载当前页面
location.href="userdata.html";
}else{
alert("用户信息失败")
}
},
error:function (xhr) {
alert("用户信息修改时产生未知的异常"+xhr.message)
}
})
})
/**
* 一旦检测到当前页面被加载就会触发ready方法
*$(document).ready(function(){
*
*});
*/
$(document).ready(function () {
$.ajax({
url: "/users/get_by_uid",
type: "GET",
data: $("#form-change-info").serialize(),
dataType: "JSON",
success: function (json) {
if (json.state == 200) {
// 将查询到的数据重新设置到控件中
$("#username").val(json.data.username);
$("#phone").val(json.data.phone);
$("#email").val(json.data.email);
let radio = json.data.gender == 0
? $("#gender-female") : $("#gender-male");
// prop()表示给某个元素添加属性及属性的值
radio.prop("checked", "checked")
} else {
alert("用户数据不存在")
}
},
error: function (xhr) {
alert("查询用户信息产生未知的异常" + xhr.message)
}
});
});
</script>