SpringBoot+MyBatis+MYSQL项目实战三(修改密码)
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
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);}})})
创作打卡挑战赛
赢取流量/现金/CSDN周边激励大奖