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设计接口和抽象方法
/**
* 根据用户的uid来修改用户密码
* @param uid 用户的id
* @param password 用户输入的新密码
* @param modifiedUser 表示修改数据的执行者
* @param modifiedTime 表示修改数据的时间
* @return 返回值为受影响的行数
*/
Integer updatePasswordByUid(@Param("uid") Integer uid,
@Param("password") String password,
@Param("modifiedUser") String modifiedUser,
@Param("modifiedTime") Date modifiedTime);
/**
* 根据用户的id查询用户的数据
* @param uid 用户的id
* @return 如果找到则返回用户的对象,反之返回null
*/
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);
}
})
})