1. 持久层
1.1 规划需要执行的sql语句
UPDATE student SET
password = #{password},
modified_user = #{modifiedUser},
modified_time = #{modifiedTime}
WHERE sid = #{sid}
1.2 设计接口和抽象方法
/**
* 修改学生密码
* @param sid 学生学号
* @param password 密码
* @param modifiedUser 修改者账号
* @param modifiedTime 修改时间
* @return 受影响的行数
*/
Integer changePassword(String sid, String password,
String modifiedUser, Date modifiedTime);
1.3 sql映射
<update id="changePassword">
UPDATE student SET
password = #{password},
modified_user = #{modifiedUser},
modified_time = #{modifiedTime}
WHERE sid = #{sid}
</update>
1.4 单元功能测试
@Test
public void changePassword() {
Integer rows = studentMapper.changePassword("007", "1234567", "管理员", new Date());
System.out.println(rows);
}
2. 业务层
2.1 规划异常
- 学生修改密码过程异常ChangePasswordException
- 原密码错误异常PasswordNotMatchException // 已规划
2.2 设计接口和抽象方法
/**
* 学生修改密码接口
* @param sid 学生学号
* @param username 修改者
* @param oldpassword 旧密码
* @param newpassword 新密码
* @return 受影响的行数
*/
void changepassword(String sid, String username, String oldpassword, String newpassword);
/**学生修改密码*/
@Override
public void changepassword(String sid, String username, String oldpassword, String newpassword) {
Student student = studentMapper.findByStudentsid(sid);
if (student == null || student.getIsDelete() == 1) {
throw new SidNotFoundException("用户数据不存在");
}
/**获取盐值对密码加密后进行比较*/
String salt = student.getSalt();
String newMd5Password = getMD5Password(oldpassword, salt);
String rpassword = student.getPassword();
// 原密码错误
if (!newMd5Password.equals(rpassword)) {
throw new PasswordNotMatchException("原密码错误!");
}
// 原密码正确,修改新密码
String newMd5Password2 = getMD5Password(newpassword, salt);
Integer rows = studentMapper.changePassword(sid, newMd5Password2, username, new Date());
System.out.println(rows);
if (rows != 1) {
throw new ChangePasswordException("密码更新过程异常");
}
}
2.3 单元功能测试
@Test
public void changepassword() {
studentService.changepassword("12333", "管理员", "123456", "12345678");
}
3. 控制层
3.1 异常处理
- 学生修改密码过程异常ChangePasswordException配置在统一异常处理中
else if (e instanceof ChangePasswordException) {
result.setState(4005);
result.setMessage("修改密码过程中出现异常");
}
3.2 设计请求
/stu/changepassword
POST
String oldpassword, String newpassword, HttpSession session
JsonResult< Void >
3.3 处理请求
@RequestMapping("changepassword")
public JsonResult<Void> changePassword(String oldpassword, String newpassword, HttpSession session) {
String sid = getsidFromSession(session);
String username = getnameFromSession(session);
studentService.changepassword(sid, username, oldpassword, newpassword);
return new JsonResult<>(OK);
}