网站如何让百度收录,营销策划方案1000例,新闻客户端网站开发,中山网站建设文化教程#x1f9f8;安清h#xff1a;个人主页 #x1f3a5;个人专栏#xff1a;【Spring篇】【计算机网络】【Mybatis篇】
#x1f6a6;作者简介#xff1a;一个有趣爱睡觉的intp#xff0c;期待和更多人分享自己所学知识的真诚大学生。 目录
#x1f383;1.修改密码 -持久… 安清h个人主页 个人专栏【Spring篇】【计算机网络】【Mybatis篇】
作者简介一个有趣爱睡觉的intp期待和更多人分享自己所学知识的真诚大学生。 目录
1.修改密码 -持久层
✨1.1规划需要执行的SQL语句
✨1.2设计接口和抽象方法
✨1.3SQL的映射
✨1.4单元测试
2.修改密码-业务层
✨2.1规划异常
✨2.2设计接口和抽象方法
3.修改密码-控制层
✨3.1处理异常
✨3.2设计请求
✨3.3处理请求
4.修改密码-前端页面
1.个人资料-持久层
✨1.1规划需要执行的SQL语句 ✨1.2接口与抽象方法的设计
✨1.3抽象方法的映射
✨1.4 完成功能测试
2.个人资料-业务层
✨2.1规划异常
✨2.2接口和抽象方法
✨2.3实现抽象方法
✨2.4在测试类中测试
3.个人资料-控制层
✨3.1处理异常
✨3.2设计请求
✨3.3处理请求
4.个人资料-前端页面 需要用户提交原始密码和新密码再根据当前登录的用户进行信息的修改操作。
1.修改密码 -持久层
✨1.1规划需要执行的SQL语句
1.根据用户的uid修改用户password值
update t_user set password?,modified_user?,modified_time? where uid?
2. 根据uid查询用户的数据。在修改密码之前首先要保证当前用户的数据存在检测是否被标记为已经删除、检测输入的原始密码是否正确。
select * from t_user where uid?
✨1.2设计接口和抽象方法
UserMapper接口将以上的两个方法的抽象定义出来。将来映射到SQL语句上。 // 根据用户的uid来修改用户密码
// param uid 用户的id
// return 返回值为受影响的行数Integer updatePasswordByUid(Integer uid,String password, //用户输入的新密码String modifiedUser, //修改的执行者Date modifiedTime); //修改数据的时间// 根据用户的uid来查询用户的数据
// param uid 用户的id
// return 如果找到则返回对象反之则返回null值User findByUid(Integer uid);
✨1.3SQL的映射
配置到映射文件中 UserMapper.xml文件中 update idupdatePasswordByUidupdate t_user set password#{password},modified_user#{modifiedUser},modified_time#{modifiedTime}where uid#{uid}/updateselect idfindByUid resultMapUserEntityMapselect * from t_user where uid#{uid}/select
✨1.4单元测试 Testpublic void updatePasswordByUid(){userMapper.updatePasswordByUid(2,123456,管理员,new Date());}Testpublic void findByUid(){System.out.println(userMapper.findByUid(6));}
2.修改密码-业务层
✨2.1规划异常
1.用户的源密码错误is_delete1uid找不到在用户没有发现的异常。
2.update在更新时有可能产生未知的异常UpdateException。
//用户在更新数据时产生的未知的异常
public class UpdateException extends ServiceException{public UpdateException() {super();}public UpdateException(String message) {super(message);}public UpdateException(String message, Throwable cause) {super(message, cause);}public UpdateException(Throwable cause) {super(cause);}protected UpdateException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {super(message, cause, enableSuppression, writableStackTrace);}
}✨2.2设计接口和抽象方法 1.执行用户修改密码的核心方法。 void changePassword(Integer uid,String username,String oldPassword,String newPassword);
2.在实现类中实现当前的抽象方法 Overridepublic void changePassword(Integer uid, String username, String oldPassword, String newPassword) {User result userMapper.findByUid(uid);if(result null || result.getIsDelete() 1){throw new UserNotFoundException(用户数据不存在);}
// 原始密码和数据库中的密码进行比较String oldMd5Password getMD5Password(oldPassword,result.getSalt());if(!result.getPassword().equals(oldMd5Password)){throw new PasswordNotMatchException(密码错误);}// 将新的密码设置到数据库中将新的密码进行加密再去更新String newMd5Password getMD5Password(newPassword, result.getSalt());Integer rows userMapper.updatePasswordByUid(uid,newMd5Password,username,new Date());if(rows ! 1){throw new UpdateException(更新时数据产生未知的异常);}}
3. 在单元测试类中编写测试方法 Testpublic void changePassword(){userService.changePassword(7,timi,123,321);}
3.修改密码-控制层
✨3.1处理异常
UpdateException需要配置在统一的处理异常方法中。
else if(e instanceof UpdateException){result.setState(5003);result.setMessage(更新数据时产生未知的异常);}
✨3.2设计请求 请求路径/users/change_password 请求参数String oldPasswordString newPassword需要和表单中的name属性值保持一致 请求类型POST 响应结果JsonResultvoid ✨3.3处理请求 RequestMapping(change_password)public JsonResultVoid change_password(String oldPassword,String newPassword,HttpSession session){Integer uid getuidFromSession(session);String username getUsernameFromSession(session);userService.changePassword(uid,username,oldPassword,newPassword);return new JsonResult(OK);}
4.修改密码-前端页面
password.html中添加ajax请求的处理不在手动编写ajax结构直接复制然后微调修改参数。 script$(#btn-change-password).click(function (){$.ajax({url:/users/change_password,type:POST,data:$(#form-change-password).serialize(),dataType:JSON,success:function (json){if(json.state200){alert(修改密码成功);}else{alert(修改密码失败);}},error:function (xhr){alert(修改密码时产生未知的异常xhr.message);}});});/script
1.个人资料-持久层
✨1.1规划需要执行的SQL语句
1.更新用户信息的SQL语句
update t_user set phone?,email?,gender?,modified_user?,modified_time? where uid?
2.根据用户名来查询用户的数据
select * from t_user where uid? 查询用户的数据不需要重复开发 ✨1.2接口与抽象方法的设计
更新用户的信息方法的定义。
// 更新用户的数据信息
// param user
// return 返回值为收影响的行数Integer updateInfoByUid(User user);
✨1.3抽象方法的映射
在UserMapper.xml文件中进行映射编写。 update idupdateInfoByUidupdate t_user set
-- if表示条件判断标签test接收的是一个返回值为boolean类型的条件如果test条件的结果为true则执行if标签内部的语句if testphone!nullphone#{phone},/ifif testemail!nullemail#{email},/ifif testgender!nullgender#{gender},/ifmodified_user#{modifiedUser},modified_time#{modifiedTime}where uid#{uid}/update
✨1.4 完成功能测试 Testpublic void updateInfoByUid(){User user new User();user.setUid(7);user.setPhone(12345678);user.setEmail(test003qq.com);user.setGender(1);userMapper.updateInfoByUid(user);}
2.个人资料-业务层
✨2.1规划异常
1.设计两个功能
当打开页面获取用户的信息并且填充到对应的文本框中。检测用户是否点击了修改按钮如果检测到则执行修改用户信息的操作。
2.打开页面可能找不到用户的数据点击删除按钮之前需要再次的去检测用户的数据是否存在。
✨2.2接口和抽象方法
在service包下的IUService编写以下代码 // 根据用户的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类中添加两个抽象方法的具体实现。 Overridepublic 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.setEmail(result.getEmail());user.setGender(result.getGender());return user;}// user对象中的数据phone/email/gender手动再将uid/username封装到user对象中Overridepublic 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.setModifiedUser(username);user.setModifiedTime(new Date());Integer rows userMapper.updateInfoByUid(user);if(rows ! 1){throw new UpdateException(更新时数据产生未知的异常);}}
✨2.4在测试类中测试 Testpublic void getByUid(){System.out.println(userService.getByUid(7));}Testpublic void changeInfo(){User usernew User();user.setPhone(87654321);user.setEmail(666333qq.com);user.setGender(0);userService.changeInfo(7,timi,user);}
3.个人资料-控制层
✨3.1处理异常
暂无。
✨3.2设计请求
1.设置-打开页面就发送当前用户数据的查询。即在打开页面的时候页面就显示username,phone,email等信息。 请求路径/users/get_by_uid 请求参数HttpSession session 请求类型GET 响应结果JsonResultUser 2.点击修改按钮发送用户的数据修改操作请求的设计。 请求路径/users/change_info 请求参数User userHttpSession session 请求类型POST 响应结果JsonResultVoid ✨3.3处理请求 RequestMapping(get_by_uid)public JsonResultUser getByUid(HttpSession session){User data userService.getByUid(getuidFromSession(session));return new JsonResult(OK,data);}RequestMapping(change_info)public JsonResultVoid 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_uid查询到的数据填充到页面上。
!-- 一旦检测到当前的页面被加载就会触发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.state200){// 将查询的数据重新设置到控件中$(#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);}});})
2.在检测到用户点击了修改按钮之后也需要发送一个ajax请求change_info。
script$(#btn-change-info).click(function (){$.ajax({url:/users/change_info,type:POST,data:$(#form-change-info).serialize(),dataType:JSON,success:function (json){if(json.state200){alert(用户信息修改成功);// 修改成功后重新加载当前的页面location.hrefuserdata.html}else{alert(用户信息修改失败);}},error:function (xhr){alert(用户信息修改时产生未知的异常xhr.message);}});});