0
点赞
收藏
分享

微信扫一扫

springboot入门项目-修改密码1-持久层/业务层

Python芸芸 2022-04-14 阅读 67

1. 修改密码功能介绍

用户在修改密码时需要输入原密码和新密码,
在后台通过uid查询到该用户,并进行原密码的校验,该用户存在且原密码输入正确时,修改密码成功。

2. 持久层

1. 规划sql语句
  1. 按uid查找用户(判断是否存在该用户):
    SELECT * FROM t_user WHERE username = ?,用于设置
  2. 更改密码:
    UPDATE t_user SET password=?WHERE uid=?
2. 编写UserMapper接口
 //根据uid修改用户密码
    Integer updatePwdByUid(Integer uid, String password, String modifiedUser, Date modifiedTime);

    //根据uid查找用户数据
    User findByUid(Integer uid);
3. 编写sql映射语句

修改密码时同时要修改modified_user、modified_time:

<update id="updatePwdByUid">
        UPDATE t_user
        SET password=#{password},modified_user=#{modifiedUser},modified_time=#{modifiedTime}
        WHERE uid=#{uid}
    </update>

    <select id="findByUid" resultMap="UserMap">
        SELECT * FROM t_user WHERE uid = #{uid}
    </select>
4. 单元测试
  1. 测试updatePwdByUid
    将uid为2的用户密码修改为➡2222
@Test
    public void updatePwdByUid() {
        userMapper.updatePwdByUid(2,"2222", "administrator", new Date());
    }

结果:
在这里插入图片描述
2. 测试findByUid

   @Test
    public void findByUid() {
        System.out.println(userMapper.findByUid(2));

    }

结果
在这里插入图片描述

3. 业务层

1. 规划异常

在更新密码时可能会产生未知的异常,自定义异常类UpdateException继承ServiceException类。

2. 编写IUserService接口的抽象方法
//根据uid修改用户密码
    Integer updatePwdByUid(Integer uid, String password, String modifiedUser, Date modifiedTime);
    //根据uid查找用户数据
    User findByUid(Integer uid);
3. 编写UserServiceImpl实现类方法
@Override
    public 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 PasswordErrorException("原密码输入错误");
        }
        //将新密码进行加密并设置新密码
        String newMD5Password = getMD5Password(newPassword, result.getSalt());
        Integer rows = userMapper.updatePwdByUid(uid, newMD5Password, username, new Date());
        //判断是否设置成功
        if(rows != 1) {
            throw new UpdateException();
        }
    }
4. 单元测试

先注册一个用户,用户名为hery,密码为111;
再修改密码为1111;
使用新密码登录,看是否能够登录成功。

    @Test
    public void changePassword() {
        userService.changePassword(9, "hery", "111", "1111");
    }

举报

相关推荐

0 条评论