SpringBoot+MyBatis+MYSQL项目实战三(修改密码)
项目源码地址: 电脑商城实战
一:修改密码——持久层
1.1规划需要执行的SQL语句 根据用户的uid修改用户的password
update t_user set password=?,modified_user=?,modified_time? where uid = ?
根据uid查询用户的数据,在修改密码之前,首先要保证当前这用户的数据存在,检测是被标记为已经删除、检测输入的原始密码是否正确。
select * from t_user where uid =?
1.2设计接口和抽象方法
Integer updatePasswordByUid(@Param("uid") Integer uid,
@Param("password") String password,
@Param("modifiedUser") String modifiedUser,
@Param("modifiedTime") Date modifiedTime);
User findByUid(Integer uid);
1.3SQL映射 配置到映射文件UserMapper.xml文件中。
<update id="updatePasswordByUid" >
UPDATE t_user SET
password = #{password},
modified_user = #{modifiedUser},
modified_time = #{modifiedTime}
WHERE uid = #{uid}
</update>
<select id="findByUid" resultMap="UserEntityMap">
SELECT * FROM t_user WHERE uid = #{uid}
</select>
1.4单元测试
@Test
public void updatePasswordByUid(){
userMapper.updatePasswordByUid(6,"123456","管理者",new Date());
}
@Test
public void findByUid(){
User byUid = userMapper.findByUid(7);
System.out.println(byUid);
}
二:修改密码——业务层
2.1规划异常
- 用户的源密码错误
- 用户没有发现的异常,is_delete==1,uid找不到
- update在更新的时候,有可能产生未知的异常
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设计接口和抽象方法 执行用户修改密码的核心方法 userSerivice接口
void changePassword(Integer uid,
String username,
String oldPassword,
String newPassword);
在实现类中实现当前的抽象方法
三:修改密码——控制层
3.1处理异常 UpdateException放在异常处理机制中,配置在统一的异常处理方法BaseController
else if(e instanceof UpdateException){
result.setState(5003);
result.setMessage("更新数据时产生未知的异常");
}
3.2设计请求 设计用户提交的请求,并设计响应的方式。
请求路径:/users/change_password
请求参数:String oldPassword, String newPassword, HttpSession session
请求类型:POST
响应结果:JsonResult<Void>
3.3处理请求
@GetMapping("/change_password")
public JsonResult<Void> changePassword(String oldPassword,
String newPassword,
HttpSession session){
Integer uid = getuidFromSession(session);
String username = getUsernameFromSession(session);
iUserService.changePassword(uid,username,oldPassword,newPassword);
return new JsonResult<>(OK);
}
四:修改密码——前端页面
具体步骤同前几篇一样的,使用ajax技术
$("#btn-change-password").click(function () {
$.ajax({
url: "/users/change_password",
type: "POST",
data : $("#form-change-password").serialize(),
dataType: "JSON",
success: function (json) {
if(json.state == 200){
alert("密码修改成功")
}
else{
alert("密码修改失败")
}
},
error: function (xhr) {
alert("修改密码时产生位置的异常"+xhr.message);
}
})
})
|